Java代码中遇到的问题

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

错误的写法

Java代码中遇到的问题_第1张图片

正确的写法

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()   获得的是字段存储的值

错误的写法

Java代码中遇到的问题_第2张图片

改正之后的写法

Java代码中遇到的问题_第3张图片

3.String   StringBuffer   StringBuilder的用法和区别

String   不可变字符串对象,每一次对String对象的改变都是产生一个新的String对象,String对象对字符串的增加或者删减操作,在JVM运行时也是转化为StringBuffer进行操作的,因此String操作字符串的速度会比StringBuffer慢;

StringBuffer   可变字符串对象,线程安全,适用在多线程下;

StringBuilder  可变字符串对象,线程不安全,适用在单线程下,绝大多数对字符串的操作都是单线程的情况下,所以在5.0版本之后新增StringBuilder来替代单线程下对String对操作;

运行速度:

StringBuilder > StringBuffer > String

使用情况总结:

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

Java代码中遇到的问题_第4张图片

你可能感兴趣的:(Java代码中遇到的问题)