mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-10 21:50:07 +00:00
8370503: Use String.newStringWithLatin1Bytes to simplify Integer/Long toString method
Reviewed-by: rgiulietti, rriggs
This commit is contained in:
parent
cc9483b4da
commit
fd23a61cd4
@ -363,15 +363,9 @@ public final class Integer extends Number
|
||||
// assert shift > 0 && shift <=5 : "Illegal shift value";
|
||||
int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);
|
||||
int chars = Math.max(((mag + (shift - 1)) / shift), 1);
|
||||
if (COMPACT_STRINGS) {
|
||||
byte[] buf = new byte[chars];
|
||||
formatUnsignedInt(val, shift, buf, chars);
|
||||
return new String(buf, LATIN1);
|
||||
} else {
|
||||
byte[] buf = new byte[chars * 2];
|
||||
formatUnsignedIntUTF16(val, shift, buf, chars);
|
||||
return new String(buf, UTF16);
|
||||
}
|
||||
byte[] buf = new byte[chars];
|
||||
formatUnsignedInt(val, shift, buf, chars);
|
||||
return String.newStringWithLatin1Bytes(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -394,26 +388,6 @@ public final class Integer extends Number
|
||||
} while (charPos > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format an {@code int} (treated as unsigned) into a byte buffer (UTF16 version). If
|
||||
* {@code len} exceeds the formatted ASCII representation of {@code val},
|
||||
* {@code buf} will be padded with leading zeroes.
|
||||
*
|
||||
* @param val the unsigned int to format
|
||||
* @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
|
||||
* @param buf the byte buffer to write to
|
||||
* @param len the number of characters to write
|
||||
*/
|
||||
private static void formatUnsignedIntUTF16(int val, int shift, byte[] buf, int len) {
|
||||
int charPos = len;
|
||||
int radix = 1 << shift;
|
||||
int mask = radix - 1;
|
||||
do {
|
||||
StringUTF16.putChar(buf, --charPos, Integer.digits[val & mask]);
|
||||
val >>>= shift;
|
||||
} while (charPos > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@code String} object representing the
|
||||
* specified integer. The argument is converted to signed decimal
|
||||
@ -427,15 +401,9 @@ public final class Integer extends Number
|
||||
@IntrinsicCandidate
|
||||
public static String toString(int i) {
|
||||
int size = DecimalDigits.stringSize(i);
|
||||
if (COMPACT_STRINGS) {
|
||||
byte[] buf = new byte[size];
|
||||
DecimalDigits.uncheckedGetCharsLatin1(i, size, buf);
|
||||
return new String(buf, LATIN1);
|
||||
} else {
|
||||
byte[] buf = new byte[size * 2];
|
||||
DecimalDigits.uncheckedGetCharsUTF16(i, size, buf);
|
||||
return new String(buf, UTF16);
|
||||
}
|
||||
byte[] buf = new byte[size];
|
||||
DecimalDigits.uncheckedGetCharsLatin1(i, size, buf);
|
||||
return String.newStringWithLatin1Bytes(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -391,15 +391,9 @@ public final class Long extends Number
|
||||
// assert shift > 0 && shift <=5 : "Illegal shift value";
|
||||
int mag = Long.SIZE - Long.numberOfLeadingZeros(val);
|
||||
int chars = Math.max(((mag + (shift - 1)) / shift), 1);
|
||||
if (COMPACT_STRINGS) {
|
||||
byte[] buf = new byte[chars];
|
||||
formatUnsignedLong0(val, shift, buf, 0, chars);
|
||||
return new String(buf, LATIN1);
|
||||
} else {
|
||||
byte[] buf = new byte[chars * 2];
|
||||
formatUnsignedLong0UTF16(val, shift, buf, 0, chars);
|
||||
return new String(buf, UTF16);
|
||||
}
|
||||
byte[] buf = new byte[chars];
|
||||
formatUnsignedLong0(val, shift, buf, 0, chars);
|
||||
return String.newStringWithLatin1Bytes(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -423,27 +417,6 @@ public final class Long extends Number
|
||||
} while (charPos > offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a long (treated as unsigned) into a byte buffer (UTF16 version). If
|
||||
* {@code len} exceeds the formatted ASCII representation of {@code val},
|
||||
* {@code buf} will be padded with leading zeroes.
|
||||
*
|
||||
* @param val the unsigned long to format
|
||||
* @param shift the log2 of the base to format in (4 for hex, 3 for octal, 1 for binary)
|
||||
* @param buf the byte buffer to write to
|
||||
* @param offset the offset in the destination buffer to start at
|
||||
* @param len the number of characters to write
|
||||
*/
|
||||
private static void formatUnsignedLong0UTF16(long val, int shift, byte[] buf, int offset, int len) {
|
||||
int charPos = offset + len;
|
||||
int radix = 1 << shift;
|
||||
int mask = radix - 1;
|
||||
do {
|
||||
StringUTF16.putChar(buf, --charPos, Integer.digits[((int) val) & mask]);
|
||||
val >>>= shift;
|
||||
} while (charPos > offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a {@code String} object representing the specified
|
||||
* {@code long}. The argument is converted to signed decimal
|
||||
@ -456,15 +429,9 @@ public final class Long extends Number
|
||||
*/
|
||||
public static String toString(long i) {
|
||||
int size = DecimalDigits.stringSize(i);
|
||||
if (COMPACT_STRINGS) {
|
||||
byte[] buf = new byte[size];
|
||||
DecimalDigits.uncheckedGetCharsLatin1(i, size, buf);
|
||||
return new String(buf, LATIN1);
|
||||
} else {
|
||||
byte[] buf = new byte[size * 2];
|
||||
DecimalDigits.uncheckedGetCharsUTF16(i, size, buf);
|
||||
return new String(buf, UTF16);
|
||||
}
|
||||
byte[] buf = new byte[size];
|
||||
DecimalDigits.uncheckedGetCharsLatin1(i, size, buf);
|
||||
return String.newStringWithLatin1Bytes(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user