0
点赞
收藏
分享

微信扫一扫

手机无线投屏到windows11电脑

书坊尚 04-03 14:30 阅读 1


目录

前言

一、自动装箱与拆箱(以 Integer 包装类为例)

二、再来看看几个示例

​三、Double ,Float 类型亦是如此吗?

四、补充


前言

        小伙伴们大家好,日常使用业务层方面的代码居多,但也不可忘了基本的一些代码格式以及原理,比如最近看到的一种题型,这里就涉及到了自动装箱的基础知识了

        Integer i = new Integer(10);
        Integer j = 10;
        Integer k = 10;
        System.out.println(i == j);   //false
        System.out.println(k == j);   //true

一、自动装箱与拆箱(以 Integer 包装类为例)

        1、装箱就是自动将基本数据类型转换为包装器类型( int >> Integer),调用Integer.valueOf(int )方法

        2、拆箱就是反过来,将包装器类型转换为基本数据类型,调用了Integer.intValue方法

        3、java并不是一开始就支持自动拆装,查了下是在Java SE5之后才支持该功能

二、再来看看几个示例

        1.比如前言中提到的 i 和 j 为什么不相等?

        2.通过new 关键字生成的Integer对象比较

        Integer i = new Integer(127);
        Integer j = new Integer(127);
        System.out.println(i == j);   //false

        3.Integer.valueOf 方法缓存的对象大小区间

        Integer k = 10;
        Integer l = Integer.valueOf(10);
        Integer l1 = Integer.valueOf(128);
        System.out.println(k == l);   //true
        System.out.println(k == l1);  //false

        来看下 Integer.valueOf 方法内部 ,制定了数值范围如果是在[-128,127]之间,返回IntegerCache缓存中已经存在的对象的引用,否则创建一个新的 Integer对象,所以k 和 l 指向的是同一个对象,k 和 l1 分别指向不同的对象

三、Double ,Float 类型亦是如此吗?

        Double i = 10.0;
        Double j = 10.0;
        Float i1 = 10.0f;
        Float j1 = 10.0f;
        Long i2 = 10l;
        Long j2 = 10l;
        System.out.println(i == j);   //false
        System.out.println(i1 == j1);   //false
        System.out.println(i2 == j2);   //true

         通过结果可以看出,Long 类型之外的都没有缓存的功能

四、补充

        IntegerCache 类

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

五、章末

        好了,文章到这里就结束了~ 

举报

相关推荐

0 条评论