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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙宁洋 中级黑马   /  2013-6-5 06:48  /  1865 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer i1=3;
Integer i2=3;
System.out.println(i1==i2);
为什么ture

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
新版本的特性,当数值在byte范围内时,若数值已经存在则不另外重新开辟空间,这样可以节省空间。
毕老师的视频上讲过:
Integer a = 128;
Integer b = 128;
System.out.println(a==b);//结果为false
Integer c = 127;
Integer d = 127;
System.out.println(c==d);//结果为true,

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
Byte,Short,Integer,Long,Character这5种整型的包装类是在对应值小于等于127时是在使用常量池池,所以常量池中只有一个3,而i1和i2是都指向3的。所以想等
Integer i3=128;

   Integer i4=128;

   System.out.println(i3==i4)//输出false
当大于128时,它们指向的就是封装的对象了,在堆内存中,i3和i4是指向不同对象的,所以为false

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
[code]1.Integer i1 = 100;  
2.  Integer i2 = 100;  
3.  
4.  if (i1==i2) {  
5.  
6.  System.out.println("i1==i2");  
7.  
8.  } else {  
9.  
10.  System.out.println("i1!=i2");  
11.  
12.  }  
13.  
14.  Integer i3 = 200;  
15.  
16.  Integer i4 = 200;  
17.  
18.  System.out.println(i3);  
19.  
20.  System.out.println(i4);  
21.  
22.  if (i3==i4) {  
23.  
24.  System.out.println("i3==i4");  
25.  
26.  } else {  
27.  
28.  System.out.println("i3!=i4");  
29.  
30.  }  
31.  
32.  //结果是:  
33.    //i1=i2  
34.  //i3!=i4  
java “==”就是比较引用,没有重载过

  而由于-128至127内的Interger都是同一个对象引用,所以第一个比较式true

  在-128至127范围之外的Interger 则不是同一个对象,所以比较为false ;

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
    这就是传说中的享元模式。对于这种基本类型数据要装箱成包装数据类型时,-128-127(1byte)之间的这些数,就将这个区间的数缓存起来,因为这些比较小的数用的比较多。下次需要用的时候直接去常量池中去拿,这样就可以节省内存空间。属于23种设计模式中的一种,比较简单。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
楼主,不要为技术分而刷问题   只要你有了实力,技术分就是浮云
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马