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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© demown 中级黑马   /  2014-4-23 08:54  /  865 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


        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 12:49

3 个回复

正序浏览
  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. }
复制代码
回复 使用道具 举报
1和3的问题:-128~127,用的是同一个对象引用,具体请查询  享元模式 flyweight

关于第2个,new创建了新对象,不同的对象,引用地址肯定不一样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马