equals与==
# equals与==
# 数值比较
# 1.基本类型比较
结论:基本类型之间直接使用”==“进行数值之间相等的判断。
int a=4,b=4;
System.out.println(a==b); //true
1
2
2
# 2.包装类型和基本类型比较
结论:包装类型与基本类型可以使用”==“进行数值比较,也可以使用包装类型equals方法进行数值比较。
当使用==进行比较时,包装类型对象会先拆箱解包转化为基本类型,然后再和基本类型进行比较。
int a=4;
Integer b=4;
System.out.println(a==b); //true
1
2
3
2
3
# 3.包装类型与包装类型进行比较
结论:包装类型之间,数值比较使用equals方法,内存地址比较使用"=="实现。
处于性能考虑,Java会在包装类里面构造一个常量池作为缓存,即享元模式。当使用Integer构造对象时,有两种方式:
- Integer a=new Integer(4):直接通过构造函数创建对象,显然分配的内存地址肯定不同。
- Intager a=4:Integer的常量池IntegerCache默认大小范围为[-128,127],因此创建对象时valueof方法会看数值有没有超出范围:
- 如果没超出那么直接返回常量池中的对象。因此下面第一个例子中a和b实际上是同一块内存地址。
- 如果超出了常量池的范围,那么直接通过构造函数创建新的对象。因此c和d通过new Integer创建对象,显然不是同一块内存地址。
Integer a=4,b=4;
Integer c=99999,d=99999;
System.out.println(a==b); //true
System.out.println(c==d); //false
1
2
3
4
2
3
4
ps:卡死一次周赛导致没有提交。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57