Integer c = 156; 将以上代码反编译,就会看到以下的: Integer c = Integer.valueOf(156);这是Java int自动装箱成Integer的特性,如果值在 -128 至 127 之间的话,那会在内存中重用。楼主可以试试以下代码 Integer c = 127; Integer d = 127;Integer e = 128; Integer f = 128;
1.堆和堆比较 Integer a = new Integer(1); Integer b = new Integer(1); a与b存的是Integer的堆中的地址,而不是值 a、b指向堆中的地址显然不同所以 a==b 为false 2。堆和栈比较 Integer是int的封装对象,堆和栈比较的是栈的值,因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值3。int类型的栈和栈比较 直接比较的是栈的值4。Integer e=1; 这个比较特殊,直接赋值 它有独立的内存,每次赋值时将检查内存中是否有值跟他匹配的,若有则把此内存地址付给e,若没有,开辟新的内存
将以上代码反编译,就会看到以下的:
Integer c = Integer.valueOf(156);这是Java int自动装箱成Integer的特性,如果值在 -128 至 127 之间的话,那会在内存中重用。楼主可以试试以下代码
Integer c = 127;
Integer d = 127;Integer e = 128;
Integer f = 128;
Integer a = new Integer(1);
Integer b = new Integer(1);
a与b存的是Integer的堆中的地址,而不是值
a、b指向堆中的地址显然不同所以 a==b 为false
2。堆和栈比较
Integer是int的封装对象,堆和栈比较的是栈的值,因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值3。int类型的栈和栈比较
直接比较的是栈的值4。Integer e=1; 这个比较特殊,直接赋值 它有独立的内存,每次赋值时将检查内存中是否有值跟他匹配的,若有则把此内存地址付给e,若没有,开辟新的内存