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

标签 java

我有这两种情况:

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。 是什么原因?? 谢谢!

最佳答案

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

  1. 字符串附加运算符将创建一个新的不可变字符串对象。表达式 s + value 是内存中与 s 不同的对象。

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

编辑:修复了常见的菜鸟错误:在 Java 中,传递的是对象引用,而不是对象本身。

关于java - String 对象如何工作(如不可变对象(immutable对象))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382164/

相关文章:

java ;字符串替换全部给出错误

java - HttpsURLConnection 不适用于 Android API 19(但适用于 API 22 至 29)

java - 如何将 JTable 的所有列自动调整为相同大小?

java - 无法为类型为 org.springframework.boot.gradle.dsl.SpringBootExtension 的对象设置未知属性 'mainClass'

java - 类型转换值(value)和由此产生的数学

java - 链表移除

java 。如何为油漆添加更多颜色?

java - 如何以 Logbacks 的 HTML 格式输出亚洲字符

java - 在实例变量中使用 ThreadLocal

java - 在 Java 中通过套接字发送数据并在 C++ 中使用 QT 套接字接收数据