黑马程序员技术交流社区

标题: 为什么ture [打印本页]

作者: 孙宁洋    时间: 2013-6-5 06:48
标题: 为什么ture
Integer i1=3;
Integer i2=3;
System.out.println(i1==i2);
为什么ture
作者: 刘海东    时间: 2013-6-5 07:19
新版本的特性,当数值在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,

作者: 金辉    时间: 2013-6-5 07:24
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
作者: 风云    时间: 2013-6-5 08:12
[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 ;
作者: 刘晓GGG    时间: 2013-6-5 14:12
    这就是传说中的享元模式。对于这种基本类型数据要装箱成包装数据类型时,-128-127(1byte)之间的这些数,就将这个区间的数缓存起来,因为这些比较小的数用的比较多。下次需要用的时候直接去常量池中去拿,这样就可以节省内存空间。属于23种设计模式中的一种,比较简单。
作者: 殇_心。    时间: 2013-6-5 15:49
楼主,不要为技术分而刷问题   只要你有了实力,技术分就是浮云




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