黑马程序员技术交流社区

标题: 参数包装对象 [打印本页]

作者: demown    时间: 2014-4-23 08:54
标题: 参数包装对象

        Integer a1 = 100;
        Integer a2 = 100;
        System.out.println(a1 == a2); // true
         
        Integer b1 = new Integer(100);
        Integer b2 = new Integer(100);
        System.out.println(b1 == b2); // false
         
        Integer c1 = 150;
        Integer c2 = 150;
        System.out.println(c1 == c2); // false

为啥第一次打印的是true,但是后面两组打印的是 false  虽然有解答但是不明白

作者: 老貓钓鱼    时间: 2014-4-23 08:59
1和3的问题:-128~127,用的是同一个对象引用,具体请查询  享元模式 flyweight

关于第2个,new创建了新对象,不同的对象,引用地址肯定不一样
作者: idream    时间: 2014-4-23 13:33
  1. package cn.itheima.demo;


  2. public class Demo {
  3.         public static void main(String[] args) {
  4.                
  5.                 /*
  6.                  * b1和b2分别指向两个对象,而两个不同的对象在堆内存中开辟的空间也不一样,地址值也不一样
  7.                  * 所以b1和b2是不相等的,是false
  8.                  */
  9.                 Integer b1 = new Integer(100);
  10.                 Integer b2 = new Integer(100);
  11.                 System.out.println(b1 == b2); // false
  12.                 /*
  13.                  * 1.5以后,可以自动装箱,自动拆箱。这里是自动装箱,
  14.                  * 1.5以后,自动装箱,如果装箱的是一个字节,那么该数据就会被共享,不会重新开辟空间
  15.                  * 一个字节:-128 --> 127  所以第一组是true,第二组是false
  16.                  */
  17.                 Integer a1 = 100;        //数据被共享,在常量池中开辟空间
  18.                 Integer a2 = 100;
  19.                 System.out.println(a1 == a2); // true
  20.                

  21.                 Integer c1 = 150;        //数据不被共享,数据在堆内存中开辟空间
  22.                 Integer c2 = 150;
  23.                 System.out.println(c1 == c2); // false
  24.         }
  25. }
复制代码





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