StringBuffer 与 StringBuilder:主要区别 | AI生成和翻译

Home 2026.01

1. Memory Overhead

2. Method Invocation Cost

3. JVM Optimizations

4. Inheritance Hierarchy

两者都继承自 AbstractStringBuilder(Package-private Class),其中包含了实际的实现:

Object
  └── AbstractStringBuilder (contains char array and logic)
      ├── StringBuffer (adds synchronized wrapper)
      └── StringBuilder (no synchronization)

5. Default Capacity

两者具有相同的默认初始 Capacity:

6. API Compatibility

7. Serialization

8. Use in Collections/Frameworks

9. Compiler Behavior

// String concatenation in loops
String s = "";
for(int i = 0; i < 100; i++) {
    s += i; // Compiler may use StringBuilder internally (Java 9+)
}

现代 Java Compiler 自动使用 StringBuilder 进行字符串拼接,而不是 StringBuffer。

10. Benchmarking Context

在以下情况下,性能差异变得显著:

11. Backwards Compatibility

12. Common Mistake

// WRONG: Sharing StringBuilder between threads
StringBuilder sb = new StringBuilder();
thread1.run(() -> sb.append("A"));
thread2.run(() -> sb.append("B")); // Race condition!

// CORRECT: Use StringBuffer or external synchronization
StringBuffer sbf = new StringBuffer();
thread1.run(() -> sbf.append("A"));
thread2.run(() -> sbf.append("B")); // Thread-safe

Summary Table

Aspect StringBuffer StringBuilder
Speed Slower Faster
Thread-Safe Yes No
Since Java 1.0 Java 5
Synchronization All methods None
Use Case Multi-threaded Single-threaded
JVM Optimization Limited Aggressive
Memory Higher Lower
Default Choice No Yes

Bottom Line: 除非你有明确的多线程需求,否则请始终使用 StringBuilder。它更快、更高效,并且是现代标准。


Back

anthropic/claude-4.5-sonnet

Donate