簡體   English   中英

字符串不變性問題

[英]String immutability question

我知道 Java 字符串是不可變的。 但是,當我運行下面的 function 時,output 並不是我所期望的。

    public static void main(String[] args) {
        String s = "wicked";
        String [] ss = new String [1];
        ss[0] = "witch";
        modify(s, ss);
        System.out.println(s+" "+ ss[0]);
    }
    private static void modify(String s, String[] ss) {
        s = "sad";
        ss[0] = "sod";          
    }

我得到的 output 是wicked sod ,而不是我預期的wicked witch 是否因為我將數組引用作為第二個參數傳遞給修改 function 而不是傳遞字符串 object 本身? 任何澄清都非常感謝。

您已更改數組的內容 - arrays 始終是可變的。

該數組最初包含對字符串“witch”的引用。 您的modify方法將數組更改為包含對字符串“sod”的引用。 沒有任何字符串本身被更改 - 只是數組的內容。

(請注意, ss[0]的值不是字符串 - 它是對字符串的引用。)

是否因為我將數組引用作為第二個參數傳遞給修改 function 而不是傳遞字符串 object 本身?

確切地。 您正在傳遞對可變 object (數組)的引用。 當方法更改此 object 時,更改將在方法外部可見。

閱讀一篇關於通過 Yoda 傳遞方法參數的非常好的文章Java 中的參數傳遞 - 通過引用還是通過值?

字符串不可變意味着您不能將“hello world”更改為“hello”。 但是您可以分配一個全新的字符串。 這就是你在這里所做的。

您正在引用數組 object。 這就是改變數組內容的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM