我应该如何在Java中复制字符串?
2022-08-31 05:50:56
String s = "hello";
String backup_of_s = s;
s = "bye";
此时,备份变量仍包含原始值“hello”(这是因为 String 的不可变性,对吗?)。
但是,使用此方法复制 Strings 真的安全吗(复制常规可变对象当然不安全),还是最好这样编写?:
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
换句话说,这两个片段之间有什么区别(如果有的话)?
编辑 - 第一个代码段安全的原因:
让我根据已经提供的良好答案(基本上集中在2个片段之间的性能差异问题上),更详细地解释一下事情:
字符串在 Java 中是不可变的,这意味着 String 对象在构造后无法修改。因此
String s = "hello";
创建一个新的 String 实例并将其地址分配给 ( 作为对实例/对象的引用)s
s
String backup_of_s = s;
创建一个新变量并对其进行初始化,以便它引用 当前由 引用的对象。backup_of_s
s
注意:字符串不可变性保证此对象不会被修改:我们的备份是安全的
注2:Java垃圾回收机制保证只要该对象被至少一个变量引用(在本例中),就不会被破坏backup_of_s
最后,创建另一个 String 实例(由于不可变性,这是唯一的方法),并修改变量,使其现在引用新对象。s = "bye";
s