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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a5702727 中级黑马   /  2014-6-16 22:21  /  993 人查看  /  7 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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的结果为什么是这样

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

7 个回复

倒序浏览
视频讲的很清楚   在-128到127 自己可以为真   在这个范围外为假
回复 使用道具 举报
我们都知道用基本的数据类型赋值给对象会进行自动装箱,也就是说你的代码实际上是这样的。
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
回复 使用道具 举报
自动装箱的初始值是一个byte。所以范围是-128-127
回复 使用道具 举报
关注中•••••
回复 使用道具 举报
话说这个有点象高新技术里提到的那个享元设计 !~
回复 使用道具 举报
江夷 中级黑马 2014-6-17 00:00:08
7#
  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:49
8#
源码里-128到127在一个缓存里,占一个字节,没有新建对象
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马