I want to compare a long value (primitive type) with another Long value (wrapper type):
long x = 5;
Long y = 5L;
// version 1: only safe, if x is a primitive type
var isEqual = x == y;
// version 2: y needs to be converted to its primitive type
var isEqual = x == y.longValue();
// version 3: using Object.equals(), x will be converted to its wrapper type
var isEqual = Objects.equals(x, y);
The question is: Is there any benefit in using version 2 instead of version 3?
The advantage of
Objects.equals(x, y)is that it covers null cases. The first two would throw a NPE if theLongvariable is null.On the other hand,
Objects.equals(x, y)would autobox thelong(primitive) argument, hence creating an object. But normally this shouldn't be a concern.So: just
Objects.equals()because the comparison involves a wrapper object and to keep the code simple and readable, otherwise just check for nullability before comparing primitives withLong.longValue().