我有这两种情况:
String s = "aa";
s = s + " aa";
System.out.println(s);
//......
工作正常!它打印aa aa。 但是有一个问题:
String s = "aa";
this.addStringToStatement(s, " aa");
System.out.println(s);
//...
private void addStringToStatement(String statement, Object value) {
statement += value;
}
它打印:aa。 是什么原因?? 谢谢!
最佳答案
这里有两个问题需要理解。
字符串附加运算符将创建一个新的不可变字符串对象。表达式
s + value
是内存中与s
不同的对象。在您的函数
addStringToStatement
中,当您执行 statement += value;
时,您没有更改变量s
,而是将本地指针statement
重新分配给新的 String 实例。
编辑:修复了常见的菜鸟错误:在 Java 中,传递的是对象引用,而不是对象本身。
关于java - String 对象如何工作(如不可变对象(immutable对象))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382164/