Comparing Integer objects
java, object, oop
Solution
For reference types, `==` checks whether the references are equal, i.e. whether they point to the same object.
For primitive types, `==` checks whether the values are equal.
`java.lang.Integer` is a reference type. `int` is a primitive type.
Edit: If one operand is of primitive type, and the other of a reference type that unboxes to a suitable primitive type, `==` will compare values, not references.
Problem
I have the following code: ``` public class Test { public static void main(String[] args) { Integer alpha = new Integer(1); Integer foo = new Integer(1); if(alpha == foo) { System.out.println("1. true"); } if(alpha.equals(foo)) { System.out.println("2. true"); } } } ``` The output is as follows: ``` 2. true ``` However changing the type of an `Integer object` to `int` will produce a different output, for example: ``` public class Test { public static void main(String[] args) { Integer alpha = new Integer(1); int foo = 1; if(alpha == foo) { System.out.println("1. true"); } if(alpha.equals(foo)) { System.out.println("2. true"); } } } ``` The new output: ``` 1. true 2. true ``` How can this be so? Why doesn't the first example code output `1. true`?