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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夜半风 中级黑马   /  2014-9-4 19:44  /  2538 人查看  /  35 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer a=127;
Integer b =127;
a==b;//结果为true,因为a和b 指向了同一个Integer对象,因为当数值在byte范围内时,对于新特性,如果该数值已经能够存在,则不会开辟新空间。

但是        Integer x=new Integer(127);
                Integer y=new Integer(127);
                System.out.println(x==y);//结果为false,这是为什么呢?谁可以告诉我

35 个回复

倒序浏览
Integer a=127;
Integer b=127;
因为a=127时,内存中就已经有了127了。所以在b=127时,是直接把127赋值给了b,

还有一个注意点就是,new 关键字是用来开辟新内存空间的,
Integer x=new Integer(127);
Integer y=new Integer(127);
所以x,y赋值的时候是先开辟了两个新的内存空间,然后再分别赋值给x,y,
由于是新开辟出来的两个内存,所以内存地址不一样,x==y的布尔值就是false了。

评分

参与人数 1技术分 +1 收起 理由
The_king丶 + 1 很给力!

查看全部评分

回复 使用道具 举报
学习下..回味享元模式
回复 使用道具 举报
本帖最后由 碎流 于 2014-9-4 21:06 编辑

哥们你敢new,它就敢创建两个,服不?   这时候是两个内存地址的对象,而对象==就是比较地址值.
回复 使用道具 举报
liaorubei 发表于 2014-9-4 20:13
Integer a=127;
Integer b=127;
因为a=127时,内存中就已经有了127了。所以在b=127时,是直接把127赋值给了 ...

学习了,顶个
回复 使用道具 举报
Integer a = 127;
这段代码的意思是:我到栈内存中去问:有没有一个值为127的变量啊?如果有,好,那我就指向你了。
就好比你到一个班中去找一个叫“127”的人,这个人只有一个。
Integer x = new Integer(127);
这段代码的意思是:我到堆中去说:你们给我个位置,我要存放一个数值为127的Integer类型的变量;不管你内存中有没有值为127的Integer对象,我都要新增一个Integer对象。只不过这两个对象碰到了,会说:噢?你的号码也是127啊?
这种情况就好比我把另一个叫“127”的人加入到这个班上来了,这两个人肯定不可能是同一个人啊!
回复 使用道具 举报 1 0
liaorubei 发表于 2014-9-4 20:13
Integer a=127;
Integer b=127;
因为a=127时,内存中就已经有了127了。所以在b=127时,是直接把127赋值给了 ...

这个解释灰常地道
回复 使用道具 举报
碎流 发表于 2014-9-4 21:04
哥们你敢new,它就敢创建两个,服不?   这时候是两个内存地址的对象,而对象==就是比较地址值. ...

x y对比是内存地址的对比啊?????????所以地址不一样为false?
回复 使用道具 举报
Peach2014 发表于 2014-9-5 14:38
Integer a = 127;
这段代码的意思是:我到栈内存中去问:有没有一个值为127的变量啊?如果有,好,那我就 ...

艾玛~~~~解释的太接地气了
回复 使用道具 举报
这个 涉及到一个  byte常量池  问题, JAVA语言为了方便操作常用数据,将byte范围的数据(-128~127)做成了一个常量池。  你赋值常量会先判断在不在这个范围内,在的话就从常量池取出,所以 127两个 Integer类型的数据指向了 同一个内存空间,但是 new关键字是开辟新的内存空间的意思,所以会显示false
回复 使用道具 举报 1 0
二楼正解
回复 使用道具 举报
顶一个了
回复 使用道具 举报
一旦new就开辟空间了,肯定不一样;
Integer i=4;是自动装箱了吧,再写一个Integer b=4;系统为了节省内存,自动给你指向i.
回复 使用道具 举报
2楼正解,明白new什么意思就懂了。
回复 使用道具 举报
本帖最后由 郑飞 于 2014-9-5 20:06 编辑

亲 在此楼层之前 建议只看10楼的答案 其他楼有的错有的没说到点 这种小知识点又不是高级技术讨论 自己要弄清楚了 才好告诉别人 很容易误导

回复 使用道具 举报
楼主看这里
传智播客毕向东Java基础视频教程-day13-14-基本数据类型对象包装类新特性.avi
第7分钟后的100秒 这才是正解
回复 使用道具 举报
liaorubei 发表于 2014-9-4 20:13
Integer a=127;
Integer b=127;
因为a=127时,内存中就已经有了127了。所以在b=127时,是直接把127赋值给了 ...

照你的说法为什么a,b变量改为128却是false,回答有问题
回复 使用道具 举报
郑飞 发表于 2014-9-5 20:04
亲 在此楼层之前 建议只看10楼的答案 其他楼有的错有的没说到点 这种小知识点又不是高级技术讨论 自己要弄 ...

学习了 谢谢大家
回复 使用道具 举报
谢谢大家了
回复 使用道具 举报
碎流 发表于 2014-9-4 21:04
哥们你敢new,它就敢创建两个,服不?   这时候是两个内存地址的对象,而对象==就是比较地址值. ...

一开始不明白 现在明白了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马