Why Java does not see that Integers are equal?
If they were simple int
types, it would work.
For Integer
use .intValue()
or compareTo(Object other)
or equals(Object other)
in your comparison.
Check out this article: Boxed values and equality
When comparing wrapper types such as Integer
s, Long
s or Boolean
s 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