黑马程序员技术交流社区

标题: 求解释结果为什么. [打印本页]

作者: a5702727    时间: 2014-6-16 22:21
标题: 求解释结果为什么.
Integer i1 = new Integer(127);
                Integer i2 = new Integer(127);
                System.out.println(i1 == i2);
                System.out.println(i1.equals(i2));
                Integer i3 = new Integer(128);
                Integer i4 = new Integer(128);
                System.out.println(i3 == i4);                System.out.println(i3.equals(i4));
                Integer i5 = 127;
                Integer i6 = 127;
                System.out.println(i5 == i6);
                System.out.println(i5.equals(i6));
                Integer i7 = 128;
                Integer i8 = 128;
                System.out.println(i7 == i8);
                System.out.println(i7.equals(i8));
结果是false true----false true-----true  true----false true   i5 i6 i7 i8的结果为什么是这样

作者: Super__kids    时间: 2014-6-16 22:29
视频讲的很清楚   在-128到127 自己可以为真   在这个范围外为假
作者: rover0321    时间: 2014-6-16 23:09
我们都知道用基本的数据类型赋值给对象会进行自动装箱,也就是说你的代码实际上是这样的。
Integer i7 = 127; // i7 = new Integer(127)
Integer i8 = 127; // i8 = new Integer(127)
Integer i9 = 128; // i9 = new Integer(128)
Integer i10 = 128; // i10 = new Integer(128)

但是问题出现在自动装箱过程中。Java为了重复利用简单的数字,规定在自动装箱时如果被装箱的数值介于-128到127之间,那么它们被装箱的对象在内存中会被重复利用,也就是说只有唯一的一个对象。而在这个范围之外的数值没有这个规定。其实这个问题有点类似于字符串的装箱,如果发现被装箱的字符串在内存中存在时是不会再创建一个新的对象的。
String str1 = "Hello";
String str2 = "Hello";

System.out.println(str1 == str2); // true
作者: See_the_sun    时间: 2014-6-16 23:15
自动装箱的初始值是一个byte。所以范围是-128-127
作者: 王广丛    时间: 2014-6-16 23:32
关注中•••••
作者: 沉默的爱    时间: 2014-6-16 23:47
话说这个有点象高新技术里提到的那个享元设计 !~
作者: 江夷    时间: 2014-6-17 00:00
  Integer i5 = 127;
                Integer i6 = 127;
                System.out.println(i5 == i6);
                System.out.println(i5.equals(i6));
                Integer i7 = 128;
                Integer i8 = 128;
                System.out.println(i7 == i8);
                System.out.println(i7.equals(i8));

所有的赋值都是自动装箱的完成的,但自动装箱有一个前提,就是必须要在byte的取值范围内,就是一个字节,也就是  -128 到 127 之间完成,

作者: alive    时间: 2014-6-20 02:44
源码里-128到127在一个缓存里,占一个字节,没有新建对象




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