JAVA深入包装类底层源码------面试题

运用的知识点:包装类、静态代码块、静态内部类、静态方法、私有化、for循环、数组等

 面试题:判断下列

Integer integer1 = Integer.valueOf(100); Integer integer2 = Integer.valueOf(100);

                        System.out.println(integer1 == integer2);

Integer integer3 = Integer.valueOf(200); Integer integer4 = Integer.valueOf(200);

                        System.out.println(integer3 == integer4);

 使用打印结果和代码及写入源代码进行讲解

public class Test03 {
    /**
     *  知识点 :深入包装类底层源码
     *面试题:
     * 		Integer integer1 = Integer.valueOf(100);
     * 	    Integer integer2 = Integer.valueOf(100);
     * 	    System.out.println(integer1 == integer2);
     *
     * 	    Integer integer3 = Integer.valueOf(200);
     * 	    Integer integer4 = Integer.valueOf(200);
     * 	    System.out.println(integer3 == integer4);
     */
    public static void main(String[] args) {
        Integer integer1=Integer.valueOf(100);
        Integer integer2=Integer.valueOf(100);
        System.out.println(integer1==integer2);//true
        System.out.println("------------------");
        Integer integer3=Integer.valueOf(200);
        Integer integer4=Integer.valueOf(200);
        System.out.println(integer3==integer4);//false
        System.out.println("------------------");

        MyInteger MyInteger1=MyInteger.valueOf(100);
        MyInteger MyInteger2=MyInteger.valueOf(100);
        System.out.println(MyInteger1==MyInteger2);//true
        System.out.println("------------------");
        MyInteger MyInteger3=MyInteger.valueOf(200);
        MyInteger MyInteger4=MyInteger.valueOf(200);
        System.out.println(MyInteger3==MyInteger4);//false

    }
}
public class MyInteger {
    private int value;//定义一个int类型的value用来转换String

    public MyInteger(int value) {//定义该类属性
        this.value = value;
    }

    public static MyInteger valueOf(int i) {//静态方法
        if (i >= MyIntegerCache.low && i <= MyIntegerCache.high) {//设定数组满足的区间
            return MyIntegerCache.cache[i - MyIntegerCache.low];//满足时返回对应值中
        }
        return new MyInteger(i);//当不满足时,新建一个MyInteger,将其放入其中,注意,只要是不满足的,都单独开辟空间放入
    }

    //MyInteger的缓冲类------静态内部类
    private static class MyIntegerCache {
        private static final int low = -128;//取值范围为常用的量,即一个字节,[-128~127]
        private static final int high = 127;
        private static final MyInteger[] cache;//定义静态数组

        //静态代码块
        static {
            //初始化缓冲数组
            cache = new MyInteger[high - low + 1];//初始化静态数组创建对象
            int j = low;
            for (int i = 0; i < cache.length; i++) {
                cache[i] = new MyInteger(j++);
            }
        }
    }

    @Override
    public String toString() {
        return Integer.toString(value);//得到int类型
    }
}

总结:

        Integer底层有个缓存类,缓存类中有个数组,存储了-128~127的Integer对象
        Integer.valueOf(num)底层会判断num是否在-128~127这个区间,如果在内就从缓存
        数组中获取数据,如果不在这个区间就new对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榮十一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值