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 s=“hello”;
创建一个新的字符串实例,并将其地址分配给s
(s
是对实例/对象的引用)
字符串backup_of_s=s;
创建新变量backup_of_s
并对其进行初始化,使其引用s
当前引用的对象。
注意:字符串不变性保证这个对象不会被修改:我们的备份是安全的
注意2:Java垃圾收集机制保证这个对象只要被至少一个变量引用(本例中为backup_of_s
)就不会被破坏
最后,s=“bye”;
创建另一个字符串实例(由于不可变性,这是唯一的方法),并修改s
变量,使其现在引用新对象。
由于字符串是不可变的,所以两个版本都是安全的。然而,后者的效率较低(它创建一个额外的对象,在某些情况下复制字符数据)。
考虑到这一点,应该首选第一个版本。
问题内容: 此时,备份变量仍包含原始值“ hello”(这是由于String的不可变性对吗?)。 但是用这种方法复制字符串是否真的 安全 (复制常规可变对象当然不安全),还是写这个更好呢?: 换句话说,这两个摘要之间有什么区别(如果有)? 编辑-第一个代码段为何安全的原因: 让我基于已经提供的良好答案(主要侧重于两个摘要之间的性能差异问题),对事情进行更详细的说明: 字符串在Java中是不可变的,
问题内容: 我在bash中有以下字符串 我想从创建一个。该包含重复直到长度= 20这样的结果应该是这样的: 在bash中如何做? 问题答案: 这应该工作:
问题内容: 这个问题在很多地方都被问到,变化不尽。例如Java-getClassLoader()。getResource()不仅使我烦恼不已。)我仍然无法使其正常工作。 这是一个代码片段: 此作品-请注意,我硬编码的路径,包含剪辑文件,该文件的目录 是 有,而且 是 在同一目录作为我的.class文件。las,注释掉的代码仅返回url的空值。 其他大多数帖子似乎都涉及getResourceAsSt
我正在做我的神经网络项目,在数据集中我只有字符串值,但我知道NN只接受数字值,所以我如何将字符串转换为double,如下所示:
我有两个字符串str1和str2。我试图用字符把一些字母从一个字符串复制到另一个字符串。我知道我可以使用字符串复制,但我想要一些字符,而不是全部字符。 在Java中,如何将子字符串从一个字符串复制到另一个字符串?
问题内容: 如何取一个并制作一个副本,但没有第一个String?示例:如果我有这个… 我如何制作一个像字符串集合颜色一样但没有红色的新字符串呢? 问题答案: 您可以使用: