如何/可以在Java中设置String对象的值(不创建新的String对象)?
答案 0 :(得分:13)
String
上没有“设置”方法。 Java中的字符串是immutable。要更改String
变量的值,您需要为变量指定不同的字符串。您无法更改现有字符串。
(不创建新的String对象)
分配不会创建新对象 - 它会复制引用。请注意,即使你写这样的东西:
s = "hello";
每次运行时都不会创建一个新的字符串对象。字符串对象将来自字符串池。
答案 1 :(得分:4)
实际上在Java中无法做到这一点,默认情况下String对象是不可变的。
事实上,这就是为什么使用像"+"
这样的"str1" + "str2"
连接运算符非常低效的原因之一,因为它所做的就是复制每个字符串以生成第三个字符串。
根据您的需要,您应该考虑使用StringBuilder
答案 2 :(得分:2)
字符串是不可变的,因此您无法更改已创建字符串的值。
答案 3 :(得分:1)
String对象在Java中是不可变的,因此任何更改都会创建一个新的String对象。如果要在不创建新对象的情况下更改对象等字符串,请使用StringBuilder。作为奖励,StringBuilder允许您在知道字符串的最终长度时预先分配额外的内存。
答案 4 :(得分:1)
我偶然发现了这个问题,因为我必须在“封闭类型”中设置一个字符串 - 一个匿名类型。但是我想在里面设置并在外面使用的所有变量都必须是最终的。
简单的解决方案是使用StringBuilder - 它是一个可变的字符串。
答案 5 :(得分:0)
这取决于你对象的定义。如果你的意思是参考,没有。始终创建引用。如果你的意思是字符使用的内存,当然。
字符串被拘留(如果可能),这意味着在作业中:
String s1 = "Hello";
String s2 = "Hello";
有2个引用(指向内存位置的指针),但Hello
仅在1个位置的内存中。这是无法修改字符串的原因之一。
答案 6 :(得分:0)
当然可以通过反射访问内部char数组。但这样做通常是个坏主意。更多关于http://www.eclipsezone.com/eclipse/forums/t16714.html。