[Logo]
Forums Register Login
how is this possible please explain
Integer i1=1000;

Integer i2=1000;

if(i1!=i2) System.out.println("different objects");

if(i1.equals(i2)) System.out.println("meaningfully equal");


output

different objects //how is this possible please explain

meaningfully equal









b]Integer i3=10;

Integer i4=10;

if(i3==i4) System.out.println("same objects");

if(i3.equals(i4)) System.out.println("meaningfully equal");


output

same objects //how is this possible please explain

meaningfully equal


how if(i3==i4) and if(i1!=i2) both can be true
This is due to autoboxing. In your first example, the value being boxed is outside the range -128 to 127. In your second example, the value is within that range. As explained under JLS - 5.1.7 Boxing Conversion...

If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

 
Thanks for the solution.
Please note that this exact same question has been asked and answered here many times before:

http://www.coderanch.com/t/491902/java/java/equals-Please-help
http://www.coderanch.com/t/470467/java/java/wrapper-class-code
http://www.coderanch.com/t/496079/java/java/Query-boxing-why-both-works
http://www.coderanch.com/t/435562/java/java/query-Wrapper-classes
http://www.coderanch.com/t/410771/java/java/wrappers

Please do a search before you post, you'll also find answers quicker if you do that.

This thread has been viewed 1108 times.

All times above are in ranch (not your local) time.
The current ranch time is
Sep 25, 2018 19:18:32.