java - 当一个引用变量在新对象中传递时,Java 中字符串的内存模型

标签 java string memory-model

在下面的代码中:

String str1= new String("Hello");
String str2= new String(str1);

我想知道,当我输入 (str1) 时会传入什么? 文字“Hello”还是str1引用的String对象在内存中的地址?

在内存模型中,这是否意味着新对象包含指向 str1 引用的对象的地址,还是包含它自己的文字“Hello”?

谢谢

最佳答案

基本上,地址被传入,但它被称为“引用”,实际上可能是句柄或其他数字,而不是字面上的内存地址。每个new SomeObject都会生成自己唯一的引用。

String内部,构造函数足够聪明,可以识别不同的String,并复制数据,即您传递给构造函数的字符串的“Hello”部分。该构造函数不会尝试直接存储引用的副本。

类似问题:Is Java pass-by-value or pass-by-reference?

关于java - 当一个引用变量在新对象中传递时,Java 中字符串的内存模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34111143/

相关文章:

java - 使用 Vector 以编程方式绘制多边形

javascript - Node.js 中通过正则表达式分割数组

c++ - 在这种情况下,带有 memory_order_seq_cst 的原子读操作读取哪个值?

java - 正在 64 位 VM 上编写引用原子

java - 如何使用 Boilerpipe 从网页中提取新闻内容?

java - java中使用ECC加密图像

java - 如何将类 java Iterator 对象转换为 clojure 序列

c++ - 逐行读取输入并转换为 vector 并打印

c# - string.IsNullOrEmpty() 与 string.NotNullOrEmpty()

c# - 内存障碍和大型结构?