我可以在Java中使用此引用作为参数更改一个方法内的引用吗?

Jic*_*hao 9 java string reference

private static void changeString(String s) {
    s = new String("new string");
}

public static void main(String[] args) {
    String s = new String("old string");
    changeString(s);
    System.out.println(s); // expect "new string"
}
Run Code Online (Sandbox Code Playgroud)

我怎么能用s作为方法changeString 的唯一参数来输出"new string" ?

谢谢.

rsp*_*rsp 10

在Java中,参数通过值传递,对象参数传递对对象的引用,这意味着您可以更改参数的引用,但这不会更改传递引用的对象.您有两种可能性,返回新对象(首选)或将引用传递给可以接收新引用的容器(集合,数组等)例如:

private static String changeStringAndReturn(String s) {
    return new String("new string");
}
private static void changeStringInArray(String[] s) {
    if (null != s && 0 < s.length) {
        s[0] = new String("new string");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在Java中,参数按值传递! (5认同)
  • 有趣的是代码是正确的,但"文档"是误导.我想知道他的代码是否也会出现同样的情况? (2认同)

Pra*_*rav 5

Java中的引用按传递,因此即使您修改函数内部的引用,更改也不会反映回调用函数,因为您在函数内部修改的内容只是原始引用的副本而不是原始引用本身.

但是您可以从changeString方法返回新字符串,而不是尝试修改那里(函数内部)的引用.