背景
java1.5后引入了自动装箱和自动拆箱的概念
自动拆箱:将引用类型转化为基本数据类型
自动装箱:将基本数据类型装为引用类型
但是实际使用中,什么情况自动拆箱什么情况自动装箱呢?
自动装箱
Integer i = 100; (调用Integer.valueOf(100)) 这里存在一个缓存变量 -128~127 ,如果基本数据类型在此范围内,则使用缓存的对象,否则new Integer(number) idea里面通过配置设置缓存最大值【-server -XX:AutoBoxCacheMax=300】,如果配置的小于127,系统会使用127
自动拆箱
//第一种情况Integer i = 100; int x = i; (调用 i.initValue(100))//第二种情况Integer i = 100;int x = 100;System.out.println(i == 100)
自动填坑
---------1----------- Integer a = 100; Integer b = 100;a == b //结果是true ----------2---------- Integer a = 200;Integer b = 200;a == b //结果是false 包装类型的比较,用equals()-----------3---------Integer a = 200;int b = 200;a == b //结果是true 【自动拆箱】 initValue()-----------4---------Integer a = 200;int b = 200;a.equals(b) //结果是true 值的比较------------5--------Long a = 200;int b = 200;a.equals(b) //结果是false 通过源码可以分析,如果类型不同一定为false ------------6--------
int a1 = Integer.MAX_VALUE +1; //结果是 -2147483648 通过原反补进行计算可得 int a2 = 222222222222222222222222; //报错,与上面对比可得上面是先计算,在赋值 ------------7--------
Long a = 128L; Long b = 128L; System.out.println(a == b); //false 内置 [-128,127] 并且不能通过系统设置
---------其它缓存--------
Short s ; [-128,127] Byte s1 ; [-128,127] Character s5 ; [0,127]