吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1098|回复: 0
收起左侧

[学习记录] 【笔记】java 学习包装类Integer常考面试题原理+笔记

[复制链接]
烟雨蒙蒙的星空 发表于 2022-2-5 17:56

关于 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);

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表