< prev index next >

src/java.base/share/classes/java/lang/String.java

Print this page

        

@@ -40,10 +40,11 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 import java.util.stream.IntStream;
 import java.util.stream.StreamSupport;
 import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.vm.annotation.Stable;
 
 /**
  * The {@code String} class represents character strings. All
  * string literals in Java programs, such as {@code "abc"}, are
  * implemented as instances of this class.

@@ -117,20 +118,31 @@
  */
 
 public final class String
     implements java.io.Serializable, Comparable<String>, CharSequence {
 
-    /** The value is used for character storage. */
+    /**
+     * The value is used for character storage.
+     *
+     * @implNote This field is marked with {@link Stable} to trust the contents
+     * of the array. No other facility in JDK provides this functionality (yet).
+     * {@link Stable} is safe here, because value is never null.
+     */
+    @Stable
     private final byte[] value;
 
     /**
      * The identifier of the encoding used to encode the bytes in
      * {@code value}. The supported values in this implementation are
      *
      * LATIN1
      * UTF16
      *
+     * @implNote Note this field is not {@link Stable}, because we want
+     * LATIN1 (0) coder to fold too. {@link Stable} would not allow that,
+     * as it reserves the default value as "not initialized" value.
+     * Constant-folding this field is handled internally in VM.
      */
     private final byte coder;
 
     /** Cache the hash code for the string */
     private int hash; // Default to 0
< prev index next >