RFR: 8310813: Simplify and modernize equals, hashCode, and compareTo for BigInteger [v11]

Roger Riggs rriggs at openjdk.org
Wed Jan 10 15:14:28 UTC 2024


On Wed, 10 Jan 2024 14:58:37 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:

>> src/java.base/share/classes/java/math/BigInteger.java line 3998:
>> 
>>> 3996:         int i = ArraysSupport.mismatch(m1, m2, len1);
>>> 3997:         if (i != -1)
>>> 3998:             return Integer.compareUnsigned(m1[i], m2[i]) < 0 ? -1 : 1;
>> 
>> Just an observation.  The (Java and intrinsic) implementation of Integer.compareUnsigned already returns -1, 0, 1.
>> Returning `Integer.compareUnsigned(m1[i], m2[i])` would yield the same result without the tertiary expression.
>
> Yes, that's what was proposed [here](https://github.com/openjdk/jdk/pull/14630#discussion_r1242245875) some time ago.
> 
> But the spec of `compareUnsigned()` does _not_ guarantee a -1, 0, 1 result, so there's a (minimal) risk when returning its value directly. (For some reason, `BigInteger` specifies a -1, 0, 1 outcome.)

In expressing intent, perhaps `Integer.signum(Integer.compareUnsigned(m1[i], [m2[i]))`.
Though it may all be for nothing if C2 can optimize it away.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14630#discussion_r1447521230


More information about the core-libs-dev mailing list