1.装箱和拆箱机制
public static void main(String[] args) { //手动装箱 将基本数据类型转化为包装类 Integer a = 5;//自动装箱 隐式装箱 System.out.println("a =" + a); int b1 = 5; Integer b = new Integer(b1); //显示装箱 System.out.println("b = " + b); System.out.println("a == b" + (a == b));//false System.out.println("a == b?" + (a.equals(b)));//true //true a是在(缓存池)常量池中获取,b是在 堆中获取/二者地址不同,但内容相同 //手动拆箱 将包装类对象转为基本数据类型对象 Integer t = new Integer(54); int t1 = t; int t2 = t.intValue();//显式拆箱 System.out.println("t1 = " + t1); System.out.println("t2 = " + t2); System.out.println("t1 == t2" + (t1 == t2));//true //缓存池原理:自动装箱时,会自动检查缓存之中是否有该数值,若有则自动从缓存池中使用即可, // 但若没有则会new一个于该数值相等时的新对象(在堆中) //缓存池对于不同的包装类存有不同容量的数据范围,Integer类默认范围在[-128,127]; //若比较Integer类型的128的值,二者的地址位置不同, Integer m = 128; Integer m1 = 128; System.out.println("m == m1" + (m == m1));//false //引用数据类型进行"=="运算时,比较的是二者的地址,m和m1都是new出来的对象,所以二者对象一定不同 }
2.BigDecimal