黑马程序员技术交流社区

标题: 数字类型的问题Integer 类型 [打印本页]

作者: 王小呆    时间: 2016-9-7 23:03
标题: 数字类型的问题Integer 类型
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   压了好久了  就是没人会
作者: &天马星空ぁ    时间: 2016-9-7 23:19
valueof()来创建Integer实例,而其它范围就是不同的引用地址,在进行自动拆装箱时java 保存有8中基本类型的“池” 整型是范围是-128~127
所以如果整数不超过127则引用指向同一“池”
所以他们指向的是同一对象
超过127 就不是同一对象

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

吸收 大神的讲解很不错    多谢
作者: 王小呆    时间: 2016-9-9 00:20
爱吃柠檬 发表于 2016-9-7 23:39
第一个是因为在JAVA中如果你的值是-128到127的范围内,就会直接比较值,而第二种是因为超出范围了,所以会创建 ...

值是-128到127的范围内,就会直接比较值    这个说法  好牵强  就跟所有无法解释的都是规则一样  不过楼上还是讲的很清楚   同样谢谢你   还是感觉楼上的说的更清楚
作者: cjc147    时间: 2016-9-9 00:48
在-128到127之内会收进常量池,第一个产生后第二个就不用重新分配一个地址了,直接获取地址就可,所以i和j指向的是同一个地址,而i2,j2不在这个范围内
作者: 最美不是下雨天    时间: 2016-9-9 01:53
integer定义的数做比较的时候范围在-128到127
作者: Array先生    时间: 2016-9-9 06:45
首先普及下:装箱比如int变Integer,如果某个地方的参数需要填入Integer,你传int给它,它自动会生成一个Integer传过去。反之,Integer变int,就是自动拆箱。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2