概述
Integer i1 = 100;
Integer i2 =100;
boolean b1 = i1== i2;//结果为true
Integer i3 =200;
Integer i4 =200;
boolean b2 = i3 == i4;//结果为false
完整代码:(编译器二次加工)
package cn.jdk.integer;
public class IntegerTest {
public static void main(String[] args) {
Integer i1 = Integer.valueOf(100);
Integer i2 = Integer.valueOf(100);
boolean b1 = i1==i2;
System.out.println("i1,i2是否是同一对象:"+b1);
Integer i3 = Integer.valueOf(200);
Integer i4 = Integer.valueOf(200);
boolean b2 = i3==i4;
System.out.println("i3,i4是否是同一对象:"+b2);
}
}
这时你应该可以看到,疑团在Integer.valueOf()方法身上。传递给这个方法100时,它返回的Integer对象是同一个对象,而传递给这个方法200时,返回的却是不同的对象。这是我们需要打开Integer的源码(这里就不粘贴Integer的源代码了),查看它的valueOf()方法内容。
Integer类的内部缓存了-128~127之间的256个Integer对象,如果valueOf()方法需要把这个范围之内的整数转换成Integer对象时,valueOf()方法不会去new对象,而是从缓存中直接获取,这就会导致valueOf(100)两次,都是从缓存中获取的同一个Integer对象!如果valueOf()方法收到的参数不在缓存范围之内,那么valueOf()方法会new一个新对象!这就是为什么Integer.valueOf(200)两次返回的对象不同的原因了。
最后
以上就是勤劳红牛为你收集整理的java中自动装箱的变态小题目的全部内容,希望文章能够帮你解决java中自动装箱的变态小题目所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复