Java自动装箱和自动拆箱原理和例子:
1.==的比较,左右两边全是引用类型就比较地址;其中一个是基本数据类型,另一个就会发生自动拆箱变成基本数据类型进行值的比较。
2.自动装箱调用Integer.valueOf(int i)
方法,例如:
Integer b = a;
等效于Integer b = Integer.valueOf(int a);
自动拆箱调用 b.intValue()
方法,例如:
Int a = b.intValue();
3.系统先把-128-127的数自动装箱到c在这里插入代码片ache中,以后发生自动装箱时,如果基本类型的值是-128到127之间,它就指向cache数值里面的对象。
4. Integer a = new Integer(123);
指向堆区域。Integer a=123;
指向常量池对象,不会创建新的对象。
Integer a = new Integer(123);
Integer b = new Integer(123);
System.out.println(a == b);
False;原因:在堆中创建对象;
Integer a = 123;
Integer b = 123;
System.out.println(a == b);
True;原因:123是-128到127之间,发生自动装箱时,它就指向cache数值里面的对象。
Integer c = 1024;
Integer d = 1024;
System.out.println(c == d);
false;原因:1024不是-128到127之间,发生自动装箱时,在堆上创建对象。
Integer a = 123;
System.out.println(a == 123);
True;原因:==的比较,123是基本数据类型,a是引用类型,a会发生自动拆箱变成基本数据类型进行值的比较,也就是123 = =123;