RFR: 8343962: [REDO] Move getChars to DecimalDigits [v7]

Chen Liang liach at openjdk.org
Sat Jan 18 21:51:40 UTC 2025


On Fri, 17 Jan 2025 16:05:32 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/util/DecimalDigits.java line 434:
>> 
>>> 432: 
>>> 433:     private static void putCharUTF16(byte[] buf, int charPos, int c) {
>>> 434:         UNSAFE.putChar(buf, ARRAY_BYTE_BASE_OFFSET + ((long) charPos << 1), (char) c);
>> 
>> I'm not sure we can put a `char` into a `byte[]`.
>> @cl4es is this safe on all platforms?
>
> The doc of `Unsafe::putChar()` delegates to the doc of `Unsafe::putInt()` which clearly states that the `Object` and `offset` arguments must locate a variable of the same type as the one of argument `x`, which is not the case here.

This is safe. See https://github.com/openjdk/jdk/blob/3804082cba56e6d26c500880cc5cbe6d4332d8f8/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template#L129-L132, where `MethodHandles.byteArrayViewVarHandle` implementation does getChar/Short/Int/Long on a byte array.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22023#discussion_r1921223873


More information about the core-libs-dev mailing list