当前位置: 首页 > 面试题库 >

我应该如何在Java中复制字符串?

张炳
2023-03-14
问题内容
    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实例并将其地址分配给ss作为对该实例/对象的引用)

String backup_of_s = s;创建一个新变量backup_of_s并对其进行初始化,以便它引用当前由引用的对象s

注意:字符串不变性保证不会修改该对象:我们的备份是安全的

注意2:Java垃圾回收机制保证只要至少一个html" target="_blank">变量引用该对象,该对象就不会被破坏(backup_of_s在这种情况下)

最后,s = "bye";创建另一个String实例(由于不可变性,这是唯一的方法),并修改s变量,使其现在引用新对象。


问题答案:

由于字符串是不可变的,因此两个版本都是安全的。但是,后者效率较低(它会创建一个额外的对象,并且在某些情况下会复制字符数据)。

考虑到这一点,应该首选第一个版本。



 类似资料:
  • 此时,备份变量仍然包含原始值“hello”(这是因为String的不可变性,对吗?)。 但是用这个方法复制字符串真的安全吗(复制常规的可变对象当然不安全),还是写这个更好呢?: 换句话说,这两个片段有什么区别(如果有的话)? 编辑-第一个代码段是安全的原因: 让我根据已经提供的良好答案(主要集中在两个片段之间的性能差异问题),稍微详细地解释一下: 字符串在Java中是不可变的,这意味着一个字符串对

  • 问题内容: 我在bash中有以下字符串 我想从创建一个。该包含重复直到长度= 20这样的结果应该是这样的: 在bash中如何做? 问题答案: 这应该工作:

  • 问题内容: 这个问题在很多地方都被问到,变化不尽。例如Java-getClassLoader()。getResource()不仅使我烦恼不已。)我仍然无法使其正常工作。 这是一个代码片段: 此作品-请注意,我硬编码的路径,包含剪辑文件,该文件的目录 是 有,而且 是 在同一目录作为我的.class文件。las,注释掉的代码仅返回url的空值。 其他大多数帖子似乎都涉及getResourceAsSt

  • 我有两个字符串str1和str2。我试图用字符把一些字母从一个字符串复制到另一个字符串。我知道我可以使用字符串复制,但我想要一些字符,而不是全部字符。 在Java中,如何将子字符串从一个字符串复制到另一个字符串?

  • 我正在做我的神经网络项目,在数据集中我只有字符串值,但我知道NN只接受数字值,所以我如何将字符串转换为double,如下所示:

  • 我需要对一个字符串进行预处理,并从中移除一些单词。我要找的东西是这样的:- 我是新的编程,所以请考虑。