黑马程序员技术交流社区

标题: Integer包装类的问题,请教了。。。 [打印本页]

作者: 苏乞儿    时间: 2014-9-13 02:21
标题: Integer包装类的问题,请教了。。。
Integer i=127;
Integer j=127;
sop(i==j);//true??????

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

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

作者: xpaibeyond    时间: 2014-9-13 02:28
  在自动装箱时对于byte范围的值,它们被装箱为Integer对象后,会存在内存中被重用。
作者: The_king丶    时间: 2014-9-13 08:42
*  当基本正数数据类型在装箱为Integer类型时,0~127之间的数字装箱后会被缓存起来,当下次对同样的数字装箱时  *  两个Integer对象是相等的,即指向同一块内存,而当数字超过127后,自动装箱后不会被缓存,再次装箱同样大于127的数字时
作者: 优乐    时间: 2014-9-13 12:24
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了
作者: 苏乞儿    时间: 2014-9-13 20:38
谢谢大牛们,我明白了,,,,,:D
作者: pvting    时间: 2014-9-13 22:58
上面未做装箱处理,下面做了装箱处理,这是Java规定,也是sun工程师深思熟虑的结果




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