string 复制 java_我应该如何在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变量,以便它现在引用新对象。

#1 热门回答(101 赞)

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

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

#2 热门回答(15 赞)

字符串是immutable objects你可以复制它们只是复制它们的引用,因为引用的对象不能改变...

因此,你可以像第一个示例中一样进行复制,没有任何问题

String s = "hello";

String backup_of_s = s;

s = "bye";

#3 热门回答(10 赞)

你的第二个版本效率较低,因为它在没有必要时创建了额外的字符串对象。

不变性意味着你的第一个版本的行为与你期望的一样,因此是首选的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值