Java 面试题包装类Integer原理

Java 投稿 50900 0 评论

Java 面试题包装类Integer原理

关于 Integer 的两个值得比较 (常考的面试题)

        /**
         * 两个Integer类型 == 比较的是地址 
         *  new 出来的是一个新的对象
         * 在这里肯定是 false 
         */
        Integer i1 = new Integer(1);
        Integer i2 = new Integer(1);
        System.out.println(i1 == i2);
        /**
         *  包装类 和 基本数据类型 使用 == 做比较
         *  比较的都是值是否相等
         */
        Integer i3 = new Integer(128);
        int i4 = 128;
        System.out.println(i3 == i4);
        /**
         * int i4 = 128; 这样的赋值方式 底层用的是 Integer类的 valueOf(int i)
         * 在 -128 到 127 之间是直接返回的值 超出了就是 new 的 看源码
         *  if (i >= -128 && i <= 127)
         *          return 返回一个 -128 到 127 之间的一个数字, 这个数字在常量池
         *     return IntegerCache.cache[i + (-IntegerCache.low)];
         *  return new Integer(i);
         *
         *  static final cache[]  返回的值是一个常量 
         *  所以 i5 和 i6 的值来自常量池 , 它们来自同一个地方所以地址都是相等的
         *
         */
        Integer i5 = 122;
        Integer i6 = 122;
        System.out.println(i5 == i6);
        /**
         * int i7 = 128; 这样的赋值方式底层用的是 Integer类的 valueOf(int i)
         * 在 -128 到 127 之间是直接返回的值 超出了就是 new 的 
         * 看源码
         *  if (i >= -128 && i <= 127)
         *     return new Integer(i);  使用的是 Integer(int value) 这个构造器
         *
         *    Integer i7 = 128;  Integer i8 = 128; 
         *       i7 和  i8  都是 new 出来的一个对象
         *    这里比较的是两个对象的地址 所以是 false
         *
         */
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);

编程笔记 » Java 面试题包装类Integer原理

赞同 (66) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽