< 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 >