== 能用于基本类型之间、基本类型与引用类型之间即相同引用类型之间,不能用于不同引用类型之间
对于基本类型,取值来对比,对于引用类型,取地址来对比
int a= 1; Integer b= 1; System.out.println(a== b);//true
Integer 自动拆箱
int a= 1; Integer b= 1; System.out.println(a== b);//true
基本类型之间 值得对比
int a= 1;
Double b= 1.0;
//Short b= 1;
//Long b= 1;
System.out.println(a== b);//true
自动拆箱的时机并不局限于基本类型与其对应的包装类型
Integer a= 1; Integer b= 1; System.out.println(a== b); //true Integer a1= 1; Integer b1= new Integer(1); System.out.println(a1== b1); //false
类似Integer a= 1直接赋值会被编译为Integer a= Integer.valueOf(1); 源码如下
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
对于-128到127之间的数,第一次赋值时会进行缓存,Integer a= 1时,会将1进行缓存,下次再写Integer b= 1时,就直接从缓存中取,就不会new了,使用为true
而如果是通过new Integer()的方式,不会利用缓存。