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?
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.Integeris a reference type.intis 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.