陷阱不理解 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 方法。如果你記得那個,那麼你可以避免一大堆初學者的錯誤。