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


4 Answers

New Answer


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


Thankyou voja


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


so compare it with i1.equals(i2)