String — immutable (can't change). StringBuilder — mutable, fast, single-threaded. StringBuffer — mutable, thread-safe, slower.
Analogy: String is like a printed book — once printed, you can't edit it. To change it, you print a new book. StringBuilder is like a whiteboard — you can write, erase, and rewrite freely. StringBuffer is like a whiteboard with a lock — safe for multiple people, but the lock slows you down.
String:
1String s = "Hello";2s = s + " World"; // Creates NEW String — "Hello" is garbage34// BAD: concatenation in loops (O(n^2) time!)5String result = "";6for (int i = 0; i < 10000; i++) {7 result += i + " "; // Creates ~10,000 temporary objects!8}910// GOOD: use StringBuilder11StringBuilder sb = new StringBuilder();12for (int i = 0; i < 10000; i++) {13 sb.append(i).append(" ");14}15String result2 = sb.toString();
StringBuilder:
1StringBuilder sb = new StringBuilder();2sb.append("Hello");3sb.append(" ");4sb.append("World");5String result = sb.toString(); // "Hello World"67// Useful methods:8sb.insert(5, "Beautiful "); // Insert at index9sb.delete(0, 6); // Delete range10sb.replace(0, 5, "Hi"); // Replace range11sb.reverse(); // Reverse12sb.charAt(0); // Access character13sb.length(); // Current length14sb.capacity(); // Current capacity1516// Pre-size for efficiency:17StringBuilder big = new StringBuilder(10000);
StringBuffer:
synchronized.1StringBuffer sbf = new StringBuffer();2sbf.append("Hello");3sbf.append(" World");4String result = sbf.toString(); // "Hello World"56// Thread-safe shared buffer7class ThreadSafeLogger {8 private StringBuffer buffer = new StringBuffer();910 public void log(String message) {11 buffer.append(message).append("\n");12 }1314 public String getLogs() {15 return buffer.toString();16 }17}
Performance:
When to use: