Why are 2 Long variables not equal with == operator in Java?
==
compares references, .equals()
compares values. These two Longs are objects, therefore object references are compared when using ==
operator.
However, note that in Long id1 = 123L;
literal value 123L
will be auto-boxed into a Long
object using Long.valueOf(String)
, and internally, this process will use a LongCache which has a [-128,127]
range, and 123 is in this range, which means, that the long object is cached, and these two are actually the same objects.
because ==
compares reference value, and smaller long values are cached
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
so it works for smaller long values
Also See
- Integer wrapper class and == operator - where is behavior specified?