On Fri, 10 Jun 2022 09:39:48 GMT, Martin Desruisseaux <[email protected]> wrote:

> `AffineTransform.equals(Object)` and `hashCode()` break two contracts:
> 
> * `A.equals(A)` returns `false` if at least one affine transform coefficient 
> is NaN.
> * `A.equals(B)` should imply `A.hashCode() == B.hashCode()`, but it is not 
> the case if a coefficient is zero with an opposite sign in A and B.
> 
> This patch preserves the current behaviour regarding 0 (i.e. -0 is considered 
> equal to +0) for backward compatibility reason. Instead the `hashCode()` 
> method is updated for being consistent with `equals(Object)` behaviour.

Hello, this is a reminder for a pull request: in the `AffineTransform` class, 
`hashCode()` is inconsistent with `equals(Object)`. The problem occurs with NaN 
and ±0 coefficients. In particular, the problem with zero values prevents the 
use of `AffineTransorm` as keys in `HashMap`, unless all zero values are forced 
to the same sign by `AffineTransform` construction or by pre-processing before 
using an `AffineTransform` instance as a key.

-------------

PR: https://git.openjdk.org/jdk/pull/9121

Reply via email to