陷阱不理解 String 是一個不可變的類
新的 Java 程式設計師經常忘記或者無法完全理解 Java String
類是不可變的。這會導致類似以下示例中的問題:
public class Shout {
public static void main(String[] args) {
for (String s : args) {
s.toUpperCase();
System.out.print(s);
System.out.print(" ");
}
System.out.println();
}
}
上面的程式碼應該以大寫形式列印命令列引數。不幸的是,它不起作用,引數的情況沒有改變。問題是這句話:
s.toUpperCase();
你可能會認為呼叫 toUpperCase()
會將 s
更改為大寫字串。它沒有。它不能! String
物件是不可變的。它們無法改變。
實際上,toUpperCase()
方法返回一個 String
物件,它是你呼叫它的 String
的大寫版本。這可能是一個新的 String
物件,但如果 s
已全部為大寫,則結果可能是現有的字串。
所以為了有效地使用這個方法,你需要使用方法呼叫返回的物件; 例如:
s = s.toUpperCase();
實際上,字串永不改變規則適用於所有 String
方法。如果你記得那個,那麼你可以避免一大堆初學者的錯誤。