我应该如何在Java中复制字符串?
String s = "hello"; String backup_of_s = s;
s = "bye";
此时,备份变量仍包含原始值“ hello”(这是由于String的不可变性对吗?)。
但是用这种方法复制字符串是否真的 (复制常规可变对象当然不安全),还是写这个更好呢?:
String s = "hello"; String backup_of_s = new String(s);
s = "bye";
换句话说,这两个摘要之间有什么区别(如果有)?
让我基于已经提供的良好答案(主要侧重于两个摘要之间的性能差异问题),对事情进行更详细的说明:
字符串在Java中是不可变的,这意味着String对象在构造后不能修改。因此,
String s = "hello";
创建一个新的String实例并将其地址分配给s
(s
作为对该实例/对象的引用)
String backup_of_s = s;
创建一个新变量backup_of_s
并对其进行初始化,以便它引用当前由引用的对象s
。
注意:字符串不变性保证不会修改该对象:我们的备份是安全的
注意2:Java垃圾回收机制保证只要至少一个变量引用该对象,该对象就不会被破坏(backup_of_s
在这种情况下)
最后,s = "bye";
创建另一个String实例(由于不可变性,这是唯一的方法),并修改s
变量,使其现在引用新对象。
回答:
由于字符串是不可变的,因此两个版本都是安全的。但是,后者效率较低(它会创建一个额外的对象,并且在某些情况下会复制字符数据)。
考虑到这一点,应该首选第一个版本。
以上是 我应该如何在Java中复制字符串? 的全部内容, 来源链接: utcz.com/qa/426329.html