繁体   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