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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 倉促、尋找你 中级黑马   /  2014-2-14 20:22  /  1372 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的对象应该是不同的啊?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

7 个回复

倒序浏览
有个地方写错了应该是:Integer d = 128也应该相当于Integer i = new Integer(128)才对的啊
回复 使用道具 举报
==  比较的是内存空间。
java把127一下的int数设为常用数据,存储在常量池中。当定义了一个以后,比如int a= 127,再定义一个b=127,他们指向的是同一个内存地址。
当int数据大于127时,每个新引用都会开辟一个新的内存空间,就算他们的数值是一样的。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
黄志成 发表于 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)
这个怎么解释呢?是不是我理解错了?
回复 使用道具 举报
Java的享元模式:Byte,Short.Integer,Long,的范围[-128,127],主要是因为这些提前有了缓存,用时直接使用都是同一个,而别的需要在建立,所以超出这个范围不相等
你的第二个是128,所以是false

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
数值的范围啊   127在Integer数值范围内  128超出了范围  所以另外新建了一个。你可以去搜搜李若亮老师关于数据内存的视频有深度讲析的

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
倉促、尋找你 发表于 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 20:50
数值的范围啊   127在Integer数值范围内  128超出了范围  所以另外新建了一个。你可以去搜搜李若亮老师关于 ...

请问有链接吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马