Check out this article: Boxed values and equality
When comparing wrapper types such as Integers, Longs or Booleans using == or !=, you’re comparing them as references, not as values.
If two variables point at different objects, they will not == each other, even if the objects represent the same value.
Example: Comparing different Integer objects using
==and!=.Integer i = new Integer(10); Integer j = new Integer(10); System.out.println(i == j); // false System.out.println(i != j); // true
The solution is to compare the values using .equals()…
Example: Compare objects using
.equals(…)Integer i = new Integer(10); Integer j = new Integer(10); System.out.println(i.equals(j)); // true
…or to unbox the operands explicitly.
Example: Force unboxing by casting:
Integer i = new Integer(10); Integer j = new Integer(10); System.out.println((int) i == (int) j); // true
References / further reading
- Java: Boxed values and equality
- Java: Primitives vs Objects and References
- Java: Wrapper Types
- Java: Autoboxing and unboxing