Java - Strings
Strings
Immutability
Strings are immutable. Any modification creates a new String object.
String s = "Hello";
s = s + " World"; // new String allocated
String Pool
Literals live in the string pool and may be reused. Use equals()
for value equality.
String a = "hi";
String b = "hi";
boolean sameRef = (a == b); // often true (pool), but don't rely on it
boolean sameVal = a.equals(b); // true (correct check)
Common Operations
String s = " Java,Streams ";
s.trim(); // "Java,Streams"
s.toUpperCase(); // " JAVA,STREAMS "
s.contains("Stream"); // true
s.substring(2, 6); // "Java"
"a:b:c".split(":"); // ["a", "b", "c"]
String.join(", ", java.util.List.of("a","b")); // "a, b"
String.format("%s %d", "count:", 3); // "count: 3"
StringBuilder vs StringBuffer
- StringBuilder: not synchronized, faster; prefer in single-threaded code.
- StringBuffer: synchronized; legacy. Use only when you truly need it.
StringBuilder sb = new StringBuilder();
sb.append("a").append("b");
String out = sb.toString();
Text Blocks (Java 15+)
String json = """
{
"name": "Ada",
"age": 36
}
""";
Unicode and Encoding
char
is a UTF-16 code unit; some characters require surrogate pairs. Prefer String
APIs that operate on code points when needed.
int count = (int) s.codePoints().count();
Never assume
s.length()
equals the number of user-perceived characters. Combine with normalization when comparing accented text.Try it
- Build a CSV line using
String.join
and usingStringBuilder
; compare clarity. - Count code points in a string that includes emoji and compare with
length()
. - Use a text block to format a JSON snippet.