+ 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);

4th Oct 2019, 12:18 PM
Shreyansh
Shreyansh - avatar
4 ответов
+ 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
4th Oct 2019, 1:59 PM
voja
voja - avatar
+ 1
Thankyou voja
4th Oct 2019, 2:03 PM
Shreyansh
Shreyansh - avatar
+ 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
4th Oct 2019, 2:12 PM
Ipang
+ 1
so compare it with i1.equals(i2)
4th Oct 2019, 2:44 PM
zemiak