StringBuffer.java (substring): Don't set `shared' on small Strings, even if buffer...
authorBryce McKinlay <bryce@mckinlay.net.nz>
Wed, 24 Sep 2003 06:19:24 +0000 (06:19 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Wed, 24 Sep 2003 06:19:24 +0000 (07:19 +0100)
* java/lang/StringBuffer.java (substring): Don't set `shared' on
small Strings, even if buffer is already shared.

From-SVN: r71726

libjava/ChangeLog
libjava/java/lang/StringBuffer.java

index cadf1aad75a5d08f63ac23094fbc9814dcece5b3..3100d2fc2620aa16108afcc78d3fdaf2ed36ea7b 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-24  Bryce McKinlay  <bryce@mckinlay.net.nz>
+
+       * java/lang/StringBuffer.java (substring): Don't set `shared' on small
+       Strings, even if buffer is already shared.
+
 2003-09-24  Michael Koch  <konqueror@gmx.de>
 
        * acinclude.m4 (AM_LC_LOCALES): Added check for locale.h.
index a7c2590f39ace07e95bf11b0712de27251ff851e..0903b40cc5ffe0f4311593639de5ca2f35faafd0 100644 (file)
@@ -564,11 +564,12 @@ public final class StringBuffer implements Serializable, CharSequence
       throw new StringIndexOutOfBoundsException();
     if (len == 0)
       return "";
-    // Share unless substring is smaller than 1/4 of the buffer.
-    if ((len << 2) >= value.length)
-      shared = true;
+    // Don't copy unless substring is smaller than 1/4 of the buffer.
+    boolean share_buffer = ((len << 2) >= value.length);
+    if (share_buffer)
+      this.shared = true;
     // Package constructor avoids an array copy.
-    return new String(value, beginIndex, len, shared);
+    return new String(value, beginIndex, len, share_buffer);
   }
 
   /**