黑马程序员技术交流社区

标题: Integer问题 [打印本页]

作者: 倉促、尋找你    时间: 2014-2-14 20:22
标题: Integer问题
Integer a = 127;相当于Integer i = new Integer(127);
Integer b = 127
System.out.println(a==b);
Integer c = 128;
Integer d = 128;
System.out.println(c==d);
结果分别是true和false,为什么啊?Integer a = 127;相当于Integer i = new Integer(127);Integer d = 128也应该相当于Integer i = new Integer(127)才对的啊,new的对象应该是不同的啊?
作者: 倉促、尋找你    时间: 2014-2-14 20:23
有个地方写错了应该是:Integer d = 128也应该相当于Integer i = new Integer(128)才对的啊
作者: 黄志成    时间: 2014-2-14 20:33
==  比较的是内存空间。
java把127一下的int数设为常用数据,存储在常量池中。当定义了一个以后,比如int a= 127,再定义一个b=127,他们指向的是同一个内存地址。
当int数据大于127时,每个新引用都会开辟一个新的内存空间,就算他们的数值是一样的。
作者: 倉促、尋找你    时间: 2014-2-14 20:43
黄志成 发表于 2014-2-14 20:33
==  比较的是内存空间。
java把127一下的int数设为常用数据,存储在常量池中。当定义了一个以后,比如int a ...

Integer a=127;默认的是Integer a = new Integer(127)
Integer b=127;  默认的是Integer b = new Integer(127)
这个怎么解释呢?是不是我理解错了?
作者: 廉伟杰    时间: 2014-2-14 20:50
Java的享元模式:Byte,Short.Integer,Long,的范围[-128,127],主要是因为这些提前有了缓存,用时直接使用都是同一个,而别的需要在建立,所以超出这个范围不相等
你的第二个是128,所以是false
作者: 奋斗的小胖子    时间: 2014-2-14 20:50
数值的范围啊   127在Integer数值范围内  128超出了范围  所以另外新建了一个。你可以去搜搜李若亮老师关于数据内存的视频有深度讲析的
作者: 黄志成    时间: 2014-2-14 22:20
倉促、尋找你 发表于 2014-2-14 20:43
Integer a=127;默认的是Integer a = new Integer(127)
Integer b=127;  默认的是Integer b = new Intege ...

你可以理解为小于127就不会new一个新的对象
作者: 倉促、尋找你    时间: 2014-2-14 22:44
奋斗的小胖子 发表于 2014-2-14 20:50
数值的范围啊   127在Integer数值范围内  128超出了范围  所以另外新建了一个。你可以去搜搜李若亮老师关于 ...

请问有链接吗?




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