On Tue, 19 Jul 2022 04:17:18 GMT, Nir Lisker <[email protected]> wrote:

>> you bring a good point, Kevin, thank you!
>
> I would use `Boolean.hashCode(relative);` for a `boolean`.
> 
> Kevin, I checked Effective Java 3rd Edition and it also says to use 0 (or 
> some other constant) for `null`.

Using 0 for a null component of the hash is fine, as long as the accum variable 
is initialized to something > 0, and as long as you accumulate all values, even 
a 0. By which I mean that the following is not OK:


    int h = 1;
    if (comp1 != null) h = 31 * h + comp1.hashCode();
    if (comp2 != null) h = 31 * h + comp2.hashCode();


nor is this:


    int h = (comp1 == null) ? 0 : comp1.hashCode();
    h = 31 * h + (comp2 == null) ? 0 : comp2.hashCode();



but this is:


    int h = 1;
    h = 31 * h + (comp1 == null) ? 0 : comp1.hashCode();
    h = 31 * h + (comp2 == null) ? 0 : comp2.hashCode();


Anyway, the latest change in this PR is good.

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

PR: https://git.openjdk.org/jfx/pull/821

Reply via email to