java 1.5 自动拆箱和装箱的注意事项

背景

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]
 
原文地址:https://www.cnblogs.com/shuaiandjun/p/10017512.html