Description
See e.g. the doc for method negate:
/** * Returns a {@code Complex} whose value is {@code (-this)}. * Returns {@code NaN} if either real or imaginary * part of this complex number is {@code Double.NaN}. * * @return {@code -this}. */ public Complex negate() { return new Complex(-real, -imaginary); }
The "NaN" advertized in the the Javadoc seems to refer to the Complex.NaN field, but negate is able to construct instances for which the contract of method equals(Object) will be broken.
As a related issue, I would make the NaN field "private" (and rename it "NAN" to avoid the CheckStyle warning); users who need to check for (any combination of) NaN should use the isNaN() method.