我有这两种情况:
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.是什么原因??谢谢!
这里有两个问题需要理解.
String append运算符将创建一个新的不可变String对象.表达式s + value是内存中的不同对象s.
在addStringToStatement执行s时的函数中,您tatement += value;不会更改变量的值s,而是将本地指针重新分配statement给新的String实例.
编辑:修复了通常的noob错误:在Java中,传递对象引用,而不是对象本身.