Equals() versus ==
It is important to understand the difference between
==and.equals()and when to use each.
Make sure you understand the concepts discussed in Primitives versus References before reading this page.
Comparing Primitives
int i = 3;
int j = 3;
if(i==j) {
System.out.println("Both variables contain the same value.");
}
When testing the equality of two primitives we always use the equality operator (==).
Reference Types
Recall that a reference variable stores a memory address. The address is the memory location where the object to which the reference refers is located in memory.
Checking for null
String word;
if(word==null) {
System.out.println("Reference is null.");
}
When we wish to determine if we have a null reference, we must use the equality operator because we need to see of the memory address
stored in the reference is null. Calling a method on a null
reference will cause a NullPointerException to be thrown at
runtime, so it doesn't make sense to call .equals(null) since
it will never return true. We will either get a
NullPointerException or the method will return
false.
Checking for Identity
Complex c1 = new Complex("2.0 + 3.2i");
Complex c2 = c1;
if(c1==c2) {
System.out.println("The references refer to exactly the same object.");
}
When we wish to determine if two references both refer to the same object (said more causually: "The objects are identical"), we are interested in comparing the memory addresses stored in the references. As a result, we use the equality operator.
Checking for Equality
Complex c1 = new Complex("2.0 + 3.2i");
Complex c2 = new Complex("2.0 + 3.2i");
if(c1.equals(c2)) {
System.out.println("The references refer to two equivalent objects.");
}
We call the .equals() when we wish to determine if two
references refer to objects that are equivalent. Because we are calling
a method, the class is responsible for defining what must be true in order
for two objects to be considered equivalent. In the class of the
Complex, we would expect the .equals() method
to return true if and only if both objects had the same values for both the
real and imaginary components.