针对Integer的比较分析
第一种情况
import java.util.Scanner;
public class L1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Integer i=new Integer(1);
Integer j=new Integer(1);
System.out.println(i==j);//结果False
}
}
分析:两个对象用==判断两个对象是否相等,只要是new出来的就是不同的对象,所以结果为False
第二种情况
Integer m=1;//底层是Integer.valueOf(1)
Integer n=1;//底层是Integer.valueOf(1)
System.out.println(m==n);//结果True
Integer x=128;
Integer y=128;
System.out.println(x==y);//结果False
分析:此种情况m和n的底层都是Integer.valueOf(1),这时可以看一下Integer.valueOf()方法的源码,如下:
由此源码可知,这里是需要看i的范围的,红线所示就是这个范围,若在[-128,127]之间,直接返回,若不在此区间返回new Integer();
对于此题,第一种情况,1在区间内,所以直接返回数值1,结果为True。
第二种情况,128不在区间内,返回的是new Integer(128),两个不同的对象,值不同,所以结果False.
第三种情况
Integer i1=127;
Integer j1=new Integer(128);
System.out.println(i1==j1);//结果False
分析:i1=127在区间[-128,127]内,128不在,二者返回值类型不同,所以结果为False
第四种情况
Integer i2=127;
int j2=127;
System.out.println(i2==j2);//结果True
分析:只要有基本类型,判断的就是值是否相等,二者值都为127,所以结果为True.