public static void main(String[] args){
/*
1.都是Integer且值都在[-128,127]之间,并且不是通过new创建
这时会调用Integer.valueOf()自动装箱方法
在这个方法里,当发现i的值位于[-128,127]之间则会从缓存中去取,而不是重新new一个对象,这样
就会使得i1==i2,因为他们都指向的是同一个对象
*/
Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1==i2); //true
/*
2.都是Integer并且两者的值不是在[-128,127]之间
这时不会返回同一个缓存里的对象,而是重新new出来两个对象,因此这两个对象的地址不同,故==比较的值不同
*/
Integer j1 = 200;
Integer j2 = 200;
System.out.println(j1==j2);//false
/*
2.自己手动new了两个对象
因为手动new,所以不走自动装箱机制,没有调用Integer.valueOf()方法。
这是两个不同的对象,故==比较的地址是不同的
*/
Integer h1 = new Integer(123);
Integer h2 = new Integer(123);
System.out.println(h1==h2);//false
/*
3.一个是 Integer 一个是 int
则此时比较的是值,而不是内存地址
*/
Integer k1 = new Integer(200);
int k2 = 200;
System.out.println(k1==k2);//true