public class Test01_java自动装箱和拆箱 {
public static void main(String[] args) {
//Ingeter是int的包装类,int的初值为0,Ingeter的初值为null
Integer integer=5;
int i=5;
System.out.println(integer==i); // true这里应该是integer进行了自动拆箱
System.out.println(integer.equals(i)); // true 基本类型是没办法调用equals方法的,这里应该是i进行了自动装箱变成了Integer
Integer i5 = 127;//java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127); -128--127之间的数
// 这个方法会对调用的数进行缓存,再次调用一个值相同的数,就不会再创建新的对象,所以两者相等
Integer i6 = 127;
System.out.println(i5==i6);//true;
//==============================================================================
//当赋的值超过了-128-127 这个范围后,就会直接创建一个Integer对象,所以i9和i10不相等
Integer i9=200;
Integer i10=200;
System.out.println(i9);
System.out.println(i10);
System.out.println(i9==i10); //false
//===================================================================================
Integer i7=new Integer(127);
Integer i8=new Integer(127);
System.out.println(i7==i8);//false;
//同理如下
char a='1';
Character b='1';
System.out.println(a==b); //true
System.out.println(b.equals(a));//true
}
}
1.Interge i4=127,Integer i5 = 127,这两个比较是相等的,但是Interge i5=new Interge(127),与i4,i3都是不等的,一个引用指向堆,而一个指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
2.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false. java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128),而valueOf()函数会对-128到127之间的数进行缓存,超出范围的会直接重新new 一个对象
3.两个都是new出来的,都为false
4.int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比