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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小呆 中级黑马   /  2016-9-7 23:03  /  844 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo {
   public static void main (String[] args) {
       Integer i = 100;
       Integer j = 100;
       System.out.println( i == j );

       Integer i2 = 200;
       Integer j2 = 200;
       System.out.println( i2 == j2 );
    }
}
  
初级学习  小问题有点多    为什么第一个的结果是true  第二个是false   压了好久了  就是没人会

8 个回复

倒序浏览
valueof()来创建Integer实例,而其它范围就是不同的引用地址,在进行自动拆装箱时java 保存有8中基本类型的“池” 整型是范围是-128~127
所以如果整数不超过127则引用指向同一“池”
所以他们指向的是同一对象
超过127 就不是同一对象

也就是说在-128到127之间的数字是同一引用地址,编译器会使用Integer
回复 使用道具 举报
恩恩恩嗯嗯嗯嗯我真的不是来水的
回复 使用道具 举报
第一个是因为在JAVA中如果你的值是-128到127的范围内,就会直接比较值,而第二种是因为超出范围了,所以会创建新对象,只不过省略了new对象的过程,这是自动拆装箱的过程,所以第二种相当于你创建了两个对象,比较的是两个对象的地址值,那肯定不一样啊 所以是false
回复 使用道具 举报
&天马星空ぁ 发表于 2016-9-7 23:19
valueof()来创建Integer实例,而其它范围就是不同的引用地址,在进行自动拆装箱时java 保存有8中基本类型的 ...

吸收 大神的讲解很不错    多谢
回复 使用道具 举报
爱吃柠檬 发表于 2016-9-7 23:39
第一个是因为在JAVA中如果你的值是-128到127的范围内,就会直接比较值,而第二种是因为超出范围了,所以会创建 ...

值是-128到127的范围内,就会直接比较值    这个说法  好牵强  就跟所有无法解释的都是规则一样  不过楼上还是讲的很清楚   同样谢谢你   还是感觉楼上的说的更清楚
回复 使用道具 举报
在-128到127之内会收进常量池,第一个产生后第二个就不用重新分配一个地址了,直接获取地址就可,所以i和j指向的是同一个地址,而i2,j2不在这个范围内
回复 使用道具 举报
integer定义的数做比较的时候范围在-128到127
回复 使用道具 举报
首先普及下:装箱比如int变Integer,如果某个地方的参数需要填入Integer,你传int给它,它自动会生成一个Integer传过去。反之,Integer变int,就是自动拆箱。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马