# HG changeset patch # User lpriima # Date 1421260552 -10800 # Node ID 0bf78b38bc0bc3b72b11be30e930a24d8c86cb1e # Parent a571480286c519c5c486663b6134b2fef7810957 8067471: Use private static final char[0] for empty Strings Reviewed-by: igerasim, redestad, shade diff -r a571480286c5 -r 0bf78b38bc0b jdk/src/java.base/share/classes/java/lang/String.java --- a/jdk/src/java.base/share/classes/java/lang/String.java Tue Jan 06 06:49:52 2015 +0100 +++ b/jdk/src/java.base/share/classes/java/lang/String.java Wed Jan 14 21:35:52 2015 +0300 @@ -135,7 +135,7 @@ * unnecessary since Strings are immutable. */ public String() { - this.value = new char[0]; + this.value = "".value; } /** @@ -175,7 +175,7 @@ * not affect the newly created string. * * @param value - * Array that is the source of characters + * Array that is the source of characters * * @param offset * The initial offset @@ -191,8 +191,14 @@ if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } - if (count < 0) { - throw new StringIndexOutOfBoundsException(count); + if (count <= 0) { + if (count < 0) { + throw new StringIndexOutOfBoundsException(count); + } + if (offset <= value.length) { + this.value = "".value; + return; + } } // Note: offset or count might be near -1>>>1. if (offset > value.length - count) { @@ -233,8 +239,14 @@ if (offset < 0) { throw new StringIndexOutOfBoundsException(offset); } - if (count < 0) { - throw new StringIndexOutOfBoundsException(count); + if (count <= 0) { + if (count < 0) { + throw new StringIndexOutOfBoundsException(count); + } + if (offset <= codePoints.length) { + this.value = "".value; + return; + } } // Note: offset or count might be near -1>>>1. if (offset > codePoints.length - count) { @@ -246,11 +258,11 @@ // Pass 1: Compute precise size of char[] int n = count; for (int i = offset; i < end; i++) { - int c = codePoints[i]; - if (Character.isBmpCodePoint(c)) - continue; - else if (Character.isValidCodePoint(c)) - n++; + int c = codePoints[i]; + if (Character.isBmpCodePoint(c)) + continue; + else if (Character.isValidCodePoint(c)) + n++; else throw new IllegalArgumentException(Integer.toString(c)); } @@ -783,7 +795,7 @@ * subarray of {@code dst} starting at index {@code dstBegin} * and ending at index: *
-     *     dstbegin + (srcEnd-srcBegin) - 1
+     *     dstBegin + (srcEnd-srcBegin) - 1
      * 
* * @param srcBegin index of the first character in the string @@ -828,7 +840,7 @@ * dst} starting at index {@code dstBegin} and ending at index: * *
-     *     dstbegin + (srcEnd-srcBegin) - 1
+     *     dstBegin + (srcEnd-srcBegin) - 1
      * 
* * @deprecated This method does not properly convert characters into