+1

Why the output is True False for the following code

Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2); i1 = 128; i2 = 128; System.out.println(i1 == i2);

10/4/2019 12:18:35 PM

Shreyansh

4 Answers

New Answer

+5

Basically, it is an optimization to save memory. On your IDE inside Integer class see IntegerCache static nested class, there you will find how is this implemented. Here you will find detailed explanations: https://stackoverflow.com/questions/3131136/integers-caching-in-java https://dzone.com/articles/java-integer-cache-why-integervalueof127-integerva https://stackoverflow.com/questions/20897020/why-integer-class-caching-values-in-the-range-128-to-127

+1

Thankyou voja

+1

Warning: A pure speculation. It seems when <i1> and <i2> are assigned a new value, a new object is created for each these variables, and then, having each their own object, the == operator returns False. Because the variables <i1> and <i2> no longer reference to the same object. System.identityHashCode(i1) differs to System.identityHashCode(i2). After the new value assignment. However, I read in below discussion, System.identityHashCode() isn't something we should rely on for comparison of objects. This is not something comparable to the `address of` & operator in C/C++ I suppose. https://stackoverflow.com/a/1961150 Hth, cmiiw

+1

so compare it with i1.equals(i2)