String对象如何工作(如不可变对象)?

art*_*rxe 1 java

我有这两种情况:

String s = "aa";
s = s + " aa";
    System.out.println(s);
    //......
Run Code Online (Sandbox Code Playgroud)

工作正常!它打印aa aa.但有个问题:

String s = "aa";
this.addStringToStatement(s, " aa");
System.out.println(s);
//...
private void addStringToStatement(String statement, Object value) {
    statement += value;
}
Run Code Online (Sandbox Code Playgroud)

它打印:aa.是什么原因??谢谢!

Il-*_*ima 5

这里有两个问题需要理解.

  1. String append运算符将创建一个新的不可变String对象.表达式s + value是内存中的不同对象s.

  2. addStringToStatement执行s时的函数中,您tatement += value;不会更改变量的值s,而是将本地指针重新分配statement给新的String实例.

编辑:修复了通常的noob错误:在Java中,传递对象引用,而不是对象本身.

  • 你做得很好,直到最后一句话.所有Java参数都按值传递. (2认同)