Comparison between variables pointing to same Integer object

前端 未结 3 867
鱼传尺愫
鱼传尺愫 2020-12-14 08:50

The output of current program is \"Strange\". But both the variables share the same reference. Why are the second and third comparisons not true?

Integer a;
         


        
3条回答
  •  -上瘾入骨i
    2020-12-14 09:41

    An Integer object is immutable, any change in an existing object will create a new object. So after a++, a new object will be created and a will start pointing to that new object while b is still pointing to the old object. Hence, after a++, a and b are pointing to different objects and a == b will always return false.

    with respect to the mentioned example :

    Integer a; //created Integer reference   
    Integer b;  //created Integer reference  
    a = new Integer(2);//created new Integer Object and a reference is assigned to that new object   
    b = a;//b also start pointing to same Integer object   
    if(b == a) { // b==a will be true as both are pointing to same object   
    System.out.println("Strange");   
    }
    a++; //after a++ , a new Integer object will be created (due to Integer immutablity and a will point to that new object while b is still pointing to old), so b==a will be false   
    if(b == a) { 
    System.out.println("Stranger"); 
    }   
    a--; //again a new Integer Object will be created and now a will start pointing to that new Object , so b==a will be false   
    if(b == a) { 
    System.out.println("Strangest");
    }
    

提交回复
热议问题