JDK 13 RFR of JDK-8223112: Clarify operational semantics of java.util.Objects.equals()

Brian Burkhalter brian.burkhalter at oracle.com
Thu May 2 21:58:00 UTC 2019


Hi Joe,

Looks good.

Brian

> On May 2, 2019, at 2:42 PM, Joe Darcy <joe.darcy at oracle.com> wrote:
> 
> Bug JDK-8223112 notes indirectly that if Objects.equals is called with (foo, null) and foo has a buggy equals method that returns true for null, the wrong result will be computed.
> 
> I don't think code should be added to Objects.equals itself to guard against this case. Instead, I think the operational semantics of the implementation should be made explicit in the specification.
> 
> Please review the patch below.
> 
> Thanks,
> 
> -Joe
> 
> diff -r 7ab4310ed472 src/java.base/share/classes/java/util/Objects.java
> --- a/src/java.base/share/classes/java/util/Objects.java    Wed May 01 20:25:31 2019 -0700
> +++ b/src/java.base/share/classes/java/util/Objects.java    Thu May 02 14:41:06 2019 -0700
> @@ -62,10 +62,11 @@
>       * Returns {@code true} if the arguments are equal to each other
>       * and {@code false} otherwise.
>       * Consequently, if both arguments are {@code null}, {@code true}
> -     * is returned and if exactly one argument is {@code null}, {@code
> -     * false} is returned.  Otherwise, equality is determined by using
> -     * the {@link Object#equals equals} method of the first
> -     * argument.
> +     * is returned.  Otherwise, if the first argument is not {@code
> +     * null}, equality is determined by calling the {@link
> +     * Object#equals equals} method of the first argument with the
> +     * second argument of this method. Otherwise, {@code false} is
> +     * returned.



More information about the core-libs-dev mailing list