Java里Integer的==

440 阅读1分钟
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