1.Long类型的空比较,不是null,而是0L
错误的写法

正确的写法

2.equals 与 == 的使用问题
== :
在基本数据类型之间比较的是数值大小
在对象之间比较的是内存地址是否一致
equals :
在封装的数据类型(Integer,Short,Long,Float,Double),String中,比较的是数值大小,因为在这些对象中equals方法已经被重写
在对象之间的比较依然是内存地址是否一致
但是需要注意的是:
数值类型只要在-128~127的范围内的都是存储在缓存中;
字符串类型只要不是new出来的,直接法创建的字符串也都是存储在缓存中;String str = "AAA";
存储在缓存中的类型意味着值只有一个,不同的只是对值的引用。
例子:
Long long1 = 3L; // -128~127
Long long2 = 3L;
long1 == long2 true
结论:
Boolean(无缓存)
Byte (全缓存)
Short(-128~127之间存在缓存中)
Integer(-128~127之间存在缓存中)
Long(-128~127之间存在缓存中)
Folat(无缓存)
Double(无缓存)
String(直接发创建出来的均存在缓存中)
Character(无缓存)
2.toString()的使用错误
Object对象.toString() 获得的是字段的类型和物理地址
String对象.toString() 获得的是字段存储的值
错误的写法

改正之后的写法

3.String StringBuffer StringBuilder的用法和区别
String 不可变字符串对象,每一次对String对象的改变都是产生一个新的String对象,String对象对字符串的增加或者删减操作,在JVM运行时也是转化为StringBuffer进行操作的,因此String操作字符串的速度会比StringBuffer慢;
StringBuffer 可变字符串对象,线程安全,适用在多线程下;
StringBuilder 可变字符串对象,线程不安全,适用在单线程下,绝大多数对字符串的操作都是单线程的情况下,所以在5.0版本之后新增StringBuilder来替代单线程下对String对操作;
运行速度:
StringBuilder > StringBuffer > String
使用情况总结:
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

网友评论