It is equivalent to use the equality == operator and the equals method to compare two objects if the equals method inherited from Object has not been overridden. In this case both checks compare the object references.

But as soon as equals is overridden, two objects not having the same reference but having the same value can be equal. This rule spots suspicious uses of == and != operators on objects whose equals methods are overridden.

Noncompliant Code Example

String firstName = getFirstName();   //String overrides equals
String lastName = getLastName();

if (firstName == lastName) { ... };   // Non-compliant; false even if the strings have the same value

Compliant Solution

String firstName = getFirstName();
String lastName = getLastName();

if (firstName != null && firstName.equals(lastName)) { ... };

Exceptions

Comparing two instances of the Class object will not raise an issue.

Class c;
if(c == Integer.class) { //No issue raised
}

See