Java----基础(装箱/拆箱)缓存池

前言

概念

就是java中基本数据类型跟包装类型之间的自动转换
基本类型----->包装类型(自动装箱)
包装类型----->基本类型(自动拆箱)

基本类型跟包装类型

  • 八大基本类型:byte,char,short,int,long,double,float,boolean
  • 相对应的包装类型:Byte,Char,Short,Integer,Long,Double,Float,Boolean

如何实现呢?

  1. 反编译class文件: javap -c 类名
  2. 发现装箱是通过 方法**Integer.valueOf(x)**来实现装箱
  3. 发现拆箱是通过 方法**Integer.intValue()**来显示拆箱

面试

  • 前面讲了这么多,面试中会出什么题目呢?

  • 不多BB直接上代码

    public class TestBox {
        public static void main(String[] args) {
            Integer i = 128;
            int j = 128;
            System.out.println(i==j);  //true
            System.out.println(i.equals(j)); //true
        }
    }
    
  • 上面讲了这么多,其实都不是很核心的地方,核心的地方是valueOf()

    ![1555404638259](C:\Users\suixin\AppData\Roaming\Typora\typora-user-images\1555404638259.pngjava基础---装箱 /拆箱 缓存池

这个地方又一个IntegerCache(缓存区)

java基础---装箱 /拆箱 缓存池

可以看到 这个 区间是[-128,127]

  • 注意:最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改

  • 面试题

    public class TestBox {
        public static void main(String[] args) {
           Integer a = 3;
           Integer b = 3;
           Integer c = 128;
           Integer d = 128;
           Integer i = 1;
           Integer j = 2;
    
           System.out.println(a==b);//true
            System.out.println(c==d);//false
            System.out.println(a==(i+j)); //true
            System.out.println((a+c)==(b+d));//true
        }
    }
    

总结

  • 了解装箱(valueOf(xxx))跟拆箱(xxx.intValue())
  • 了解缓存区(缓存池)
  • 面试中的要点

相关文章:

  • 2021-11-22
  • 2021-11-22
  • 2022-02-26
  • 2021-08-21
  • 2021-12-08
  • 2021-12-23
  • 2021-06-29
  • 2021-12-13
猜你喜欢
  • 2021-12-24
  • 2021-05-30
  • 2022-02-04
  • 2021-09-03
  • 2021-05-21
  • 2022-12-23
相关资源
相似解决方案