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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Integer x=128,Integer y=128,x==y ??

17 个回复

正序浏览
再来复习一下
回复 使用道具 举报
路过,顶一下
回复 使用道具 举报
这主要是编译器采取的优化策略,如果<=127;它会采取一个优化策略,把该对象缓存,但如果用new的话就不会出现上述情况,高于127的话,就禁止了这项缓存优化
回复 使用道具 举报
那节课是多少,记得不是很清楚了
回复 使用道具 举报
Adualtbird 发表于 2015-9-17 15:10
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把 ...

老师当时说的是Byte型数据
回复 使用道具 举报
不相等,Integer每次新定义对象都会重新分配内存,同时分配给其新的对应地址,尽管数值相同,也不是同一个Integer型对象,所以X==y不对。但是如果你把他们转化成整数型int数据,那就相等了
回复 使用道具 举报
false是正解,这是整型的自动拆装箱实现的,在-128到127内自动比较大小,超过的话会创建对象,对象的地址肯定是不一样的。

/**
* 测试Integer
* @author Adam
*
*/

public class Test1 {

        public static void main(String[] args) {
                Integer i1 = -128;
                Integer i2 = -128;
               
                Integer i3 = 127;
                Integer i4 = 127;
               
                Integer i5 = 128;
                Integer i6 = 128;
               
                System.out.println("i1==i2:"+(i1==i2));
                System.out.println("i3==i4:"+(i3==i4));
                System.out.println("i5==i6:"+(i5==i6));
        }

}
结果:
i1==i2:true
i3==i4:true
i5==i6:false
回复 使用道具 举报
恩,是我记错了
回复 使用道具 举报
Adualtbird 发表于 2015-9-17 15:10
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把 ...

不包括128的
回复 使用道具 举报
false的都是正解,127最大了
回复 使用道具 举报
false  超过了127 系统常量池里面就会对 Integer类型 new 对象了
回复 使用道具 举报
结果是 true
回复 使用道具 举报
楼上正解
回复 使用道具 举报
Adualtbird 发表于 2015-9-17 15:10
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把 ...

128以内不包含128,左移x==y是false,如果是127,x==y就是true了。
回复 使用道具 举报
超过127肯定是不对等的
回复 使用道具 举报
不等于,x和y是两个不同的对象,对象之间的比较是比较他们的地址
回复 使用道具 举报
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把引用附给新的引用,所以x==y是对的
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马