一、什么是String的不可變性?
- String的不可變性是Java語言中一個基礎但極其重要的概念。簡單來說:一旦一個String對象被創建,它的值就永遠不能被改變。任何看似"修改"字符串的操作,實際上都是創建了一個全新的String對象。
生活中的類比
- 想象一個刻在石頭上的文字:
- ?? 不可變字符串:就像刻在石頭上的字 - 一旦刻上,就不能修改。如果想改變文字,必須換一塊新石頭重新刻
- ?? 可變字符串:就像寫在白板上的字 - 可以隨時擦掉重寫,還是同一塊白板
二、為什么String要設計成不可變?
1. 安全性
想象一個銀行系統的賬戶名:
String accountName = "張三";
如果String是可變的,黑客可能通過修改這個字符串來訪問其他賬戶:
accountName.replace("張", "李"); // 如果可變,會變成"李三"!
由于String不可變,這種攻擊不可能發生。
2. 線程安全
多線程環境下,不可變對象天生線程安全:
// 多個線程可以安全共享
public static final String API_KEY = "sk-123456";
不需要任何同步措施,因為值永遠不會改變。
3. 哈希值緩存
String常用作HashMap的鍵:
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
因為String不可變,它的哈希值可以安全緩存:
// String類中的哈希值緩存
private int hash; // 默認為0public int hashCode() {int h = hash;if (h == 0 && !hashIsZero) {// 第