Objects.equals and Object.equals

jfcjohn picture jfcjohn · Dec 28, 2015 · Viewed 34.7k times · Source

I try to create a tuple class that allows a tuple-like structure in Java. The general type for two elements in tuple are X and Y respectively. I try to override a correct equals for this class.

Thing is, I know Object.equals falls into default that it still compares based on references like "==", so I am not so sure I can use that. I looked into Objects and there is an equals() in it. Does this one still compare on references, or it compares on contents?

Quickly imagined the return statement as something like:

return Objects.equals(compared.prev, this.prev) && Objects.equals(compared.next, this.next);

where prev and next are elements of tuple. Would this work?

Answer

Bohemian picture Bohemian · Dec 28, 2015

The difference is the Objects.equals() considers two nulls to be "equal". The pseudo code is:

  1. if both parameters are null or the same object, return true
  2. if the first parameter is null return false
  3. return the result of passing the second parameter to the equals() method of the first parameter

This means it is "null safe" (non null safe implementation of the first parameter’s equals() method notwithstanding).