2010-08-02 36 views

回答

13

String上没有“set”方法。在Java中字符串是immutable。要更改String变量的值,您需要为该变量分配一个不同的字符串。你不能改变现有的字符串。

(不创建一个新的String对象)

勘定不创建一个新的对象 - 它复制参考。请注意,即使你写的是这样的:

s = "hello"; 

不会创建一个新的字符串对象每次运行时间。字符串对象将来自字符串池。

2

字符串是不可变的,所以你不能改变已经创建的字符串的值。

4

实际上在Java中没有办法做到这一点,String对象默认是不可变的。

事实上,这就是为什么使用"+"级联运算符(如"str1" + "str2")效率非常低的原因之一,因为它的作用是复制每个字符串以产生第三个字符串。

根据您的需要时,你应该考虑使用StringBuilder

0

这取决于你的对象定义了一下。如果你的意思是参考,不。一个引用总是被创建。如果你指的是字符使用的内存,当然。

字符串被扣留(如果可能的话),这意味着在一个赋值:

String s1 = "Hello"; 
String s2 = "Hello"; 

有2名的引用(指向的存储器位置),但Hello是在存储器上只有1处。这是字符串无法修改的原因之一。

0

确定你可以通过反射访问内部字符数组。但这样做通常是个坏主意。更多关于http://www.eclipsezone.com/eclipse/forums/t16714.html

+0

它总是**一个坏主意。如果您需要可变字符串,请改用'StringBuilder'实例。 – 2010-08-02 13:06:32

1

String对象在Java中是不可变的,因此任何更改都会创建一个新的String对象。如果您想更改像对象这样的字符串而不创建新对象,请使用StringBuilder。作为一个奖励,StringBuilder允许你预先分配额外的内存,如果你知道你的字符串的最终长度的东西。

1

我偶然发现这个问题,因为我必须在“封闭类型” - 一个匿名类型中设置一个字符串。但是我想要在内部设置并在外部使用的所有变量都必须是最终的。

简单的解决方案是使用StringBuilder - 它是一个可变的字符串。

相关问题