A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Integer a=3 和Integer a=new Integer(3);在内存上操作是不等价的。。
Integer x=new Integer(3);
Integer y=3;
Integer z=3;
sop(x==y)//是false
sop(y==z)//是true 即Integer y=3;与Integer x=new Integer(3)个人认为是创建的对象形式上或者存储方式上有区别,具体是什么区别呢?

2 个回复

倒序浏览
可以看下Integer x=new Integer(3)  nteger y=3  的class文件  反编译出来的都是走的valueOf方法来赋值的,还有一个要清楚的就是Integer类里面有一个常量池就是一个数组值是byte范围内,如果要赋值的数在这个范围内就直接返回常量池里面的地址,如果不在则会new一个出来
回复 使用道具 举报
骓逝 发表于 2016-3-17 11:10
可以看下Integer x=new Integer(3)  nteger y=3  的class文件  反编译出来的都是走的valueOf方法来赋值的, ...

Integer x=new Integer(3)在Integer常量池中存入了3且引用变量x指向这个常量,Integer新特性下(3小于127),那么Integer y=3在常量池内找到了3,便不会新建一个3,只是想y指向了原本存在的3,因此y和x指向的是一个常量池中的同一个3。。。我觉得x==y为false的原因应该是x指向这个的是new Integer(3)对象,因为==比较的是内存地址,而y却没有在堆内存中new这么一个对象否则y==z不会是true,问题还是在new身上。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马