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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏乞儿 中级黑马   /  2014-9-13 02:21  /  1189 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer i=127;
Integer j=127;
sop(i==j);//true??????

Integer a=128;
Integer b=128;
sop(a==b);//false??????

"=="不是比较的是哈希值吗,都应为false啊?求大牛科普。。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

5 个回复

倒序浏览
  在自动装箱时对于byte范围的值,它们被装箱为Integer对象后,会存在内存中被重用。
回复 使用道具 举报
*  当基本正数数据类型在装箱为Integer类型时,0~127之间的数字装箱后会被缓存起来,当下次对同样的数字装箱时  *  两个Integer对象是相等的,即指向同一块内存,而当数字超过127后,自动装箱后不会被缓存,再次装箱同样大于127的数字时

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
Integer在-128 到 127是不会自动装箱的,也就是说不会再创建一个新的Integer对象,应为他早已经创建好了-128到127的Integer对象,他会直接把这些创建好的对象赋给引用变量。

为什么会先创建好了这些对象,因为这些对象常用,叫什么模式来着,我也忘了,你可以去看看那视频!!!

当不在-128到127的时候就会自动装箱,例如 Integer a=128;就相当于Integer a=new Integer(128);所以你在用
Integer b=128;他又会创建一个Integer对象,相当于Integer b=new Integer(128);
所以你说的a和b是2个不同的对象,所以a==b就为false了
回复 使用道具 举报
谢谢大牛们,我明白了,,,,,:D
回复 使用道具 举报
上面未做装箱处理,下面做了装箱处理,这是Java规定,也是sun工程师深思熟虑的结果
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马