RFR: 8370013: Refactor Double.toHexString to eliminate regex and StringBuilder [v12]

Raffaello Giulietti rgiulietti at openjdk.org
Tue Oct 21 10:20:26 UTC 2025


On Tue, 21 Oct 2025 07:28:16 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/Double.java line 768:
>> 
>>> 766:             // Integer.digits maps values 0-15 to '0'-'f' characters
>>> 767:             chars[index++] = Integer.digits[((int)(signifBits >> ((12 - i) << 2))) & 0xF];
>>> 768:         }
>> 
>> Suggestion:
>> 
>>         for (int sh = 48, end = 4 * trailingZeros; sh >= end; sh -= 4) {
>>             // Extract 4 bits at a time from left to right
>>             // Shift right by sh positions and mask with 0xF
>>             // Integer.digits maps values 0-15 to '0'-'f' characters
>>             chars[index++] = Integer.digits[((int)(signifBits >> sh)) & 0xF];
>>         }
>
> Or even
> 
>         for (int sh = 4 * 12, end = 4 * trailingZeros; sh >= end; sh -= 4) {
>             ...

@wenshao Sorry to bother, but I think that my suggestion above (`sh = 4 * 12`) makes it even more clear that `sh` is always a multiple of 4.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27811#discussion_r2447606714


More information about the core-libs-dev mailing list