All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sonar.l10n.java.rules.squid.S1201.html Maven / Gradle / Ivy

There is a newer version: 8.6.0.37351
Show newest version

"equals" as a method name should be used exclusively to override Object.equals(Object) to prevent any confusion.

It is tempting to overload the method to take a specific class instead of Object as parameter, to save the class comparison check. However, this will not work as expected.

Noncompliant Code Example

class MyClass {
  private int foo = 1;

  public boolean equals(MyClass o) {                    // Noncompliant - "equals" method which does not override Object.equals(Object)
    return o != null && o.foo == this.foo;
  }

  public static void main(String[] args) {
    MyClass o1 = new MyClass();
    Object o2 = new MyClass();
    System.out.println(o1.equals(o2));                  // Will display "false" because "o2" is of type "Object" and not "MyClass"
  }
}

Compliant Solution

class MyClass {
  private int foo = 1;

  @Override
  public boolean equals(Object o) {                     // Compliant - overrides Object.equals(Object)
    if (o == null || !(o instanceof MyClass)) {
      return false;
    }

    MyClass other = (MyClass)o;
    return this.foo == other.foo;
  }

  /* ... */
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy