黑马程序员技术交流社区

标题: JAVA基础.常用API.Integer包装类难题 [打印本页]

作者: ZONGYUTONG91    时间: 2016-4-20 23:11
标题: JAVA基础.常用API.Integer包装类难题
判断以下程序打印的结果:
        Integer i1 = new Integer(97);
        Integer i2 = new Integer(97);
        System.out.println(i1 == i2);               
        //false,==好判断的是地址值,i1和i2的在内存中开辟了两个内存空间,地址值不同
       
        System.out.println(i1.equals(i2));       
        //true,equals方法比较的是内容,i1和i2内容相同
        System.out.println("-----------");
       
        Integer i3 = new Integer(197);
        Integer i4 = new Integer(197);
        System.out.println(i3 == i4);               
        //false,同i1和i2,两者地址值不同
       
        System.out.println(i3.equals(i4));       
        //true,同i1和i2,两者内容相同
       
        System.out.println("-----------");
       
        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6);               
        //true,在byte范围内,同时没有用new创建对象,自动装箱就不会新创建对象,而是从常量池中获取
       
        System.out.println(i5.equals(i6));       
        //true,同i1和i2,两者内容相同
       
        System.out.println("-----------");
       
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);
       
        //false,超过了byte取值范围就会再新创建对象
       
        System.out.println(i7.equals(i8));       
        //true,同i1和i2,两者内容相同

总结:-128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取
      如果超过了byte取值范围就会再新创建对象
作者: 东方乔恩    时间: 2016-4-20 23:18
总结的漂亮,又学到新东西了,赞




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