JDK 13 RFR of JDK-8223112: Clarify operational semantics of java.util.Objects.equals()
Joseph D. Darcy
joe.darcy at oracle.com
Thu May 2 22:44:24 UTC 2019
PS Please also review the CSR
https://bugs.openjdk.java.net/browse/JDK-8223265
Note that the particular implementation used in Objects.equals was
recommended in its initial code review back in 2009:
http://mail.openjdk.java.net/pipermail/core-libs-dev/2009-September/002580.html
Thanks,
-Joe
On 5/2/2019 2:42 PM, Joe Darcy wrote:
> Hello,
>
> 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.
> *
> * @param a an object
> * @param b an object to be compared with {@code a} for equality
>
> ...
>
> public static boolean equals(Object a, Object b) {
> return (a == b) || (a != null && a.equals(b));
> }
>
More information about the core-libs-dev
mailing list