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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

17 个回复

倒序浏览
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把引用附给新的引用,所以x==y是对的
回复 使用道具 举报 1 0
不等于,x和y是两个不同的对象,对象之间的比较是比较他们的地址
回复 使用道具 举报
超过127肯定是不对等的
回复 使用道具 举报
Adualtbird 发表于 2015-9-17 15:10
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把 ...

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

不包括128的
回复 使用道具 举报
恩,是我记错了
回复 使用道具 举报
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
回复 使用道具 举报
不相等,Integer每次新定义对象都会重新分配内存,同时分配给其新的对应地址,尽管数值相同,也不是同一个Integer型对象,所以X==y不对。但是如果你把他们转化成整数型int数据,那就相等了
回复 使用道具 举报
Adualtbird 发表于 2015-9-17 15:10
我记得老师好像说过,基本数据类型,在128以内,当再次需要改数据时,系统不会再创建新的数据,而是直接把 ...

老师当时说的是Byte型数据
回复 使用道具 举报
那节课是多少,记得不是很清楚了
回复 使用道具 举报
这主要是编译器采取的优化策略,如果<=127;它会采取一个优化策略,把该对象缓存,但如果用new的话就不会出现上述情况,高于127的话,就禁止了这项缓存优化
回复 使用道具 举报
路过,顶一下
回复 使用道具 举报
再来复习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马