目录
Integer a= 127 与 Integer b = 127相等吗
常量池
java中存在字符串常量池,维护了所有String对象
使用String s="zx"的时候是使用String.valueOf("zx")从常量池中找了个对象返回 如果不存在则将内容放入常量池中
在使用new的时候是直接创建一个新的对象在堆中
Integer中也有常量池 其中缓存了-128到127之间的数字(一个字节八位大小)
Integer a= 127 与 Integer b = 127相等吗
对于对象引用类型:
==
比较的是对象的内存地址。
对于基本数据类型:
==
比较的是值。
如果整型字面量的值在-128
到
127
之间,那么自动装箱时不会
new 新的Integer
对象,而是直接引用Integer常量池中的
Integer
对象,超过范围
a1==b1
的结果是
false
public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3; // 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b);
// false 两个引用没有引用同一对象(比较的是引用)
System.out.println(a == c);
// true a自动拆箱成int类型再和c比较(比较的是值)
System.out.println(b == c);
// true
//如果整型字面量的值在-128到127之间,
//那么自动装箱时不会new 新的Integer 对象,
//而是直接引用常量池中的Integer对象,
//超过范围 a1==b1的结果是false
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a1 == b1);
// false
Integer a2 = 127;
Integer b2 = 127;
System.out.println(a2 == b2);
// true
}