为什么string在java中被称为immutable?

Nit*_*hya 0 string immutability

我知道不可变对象是无法修改的对象.但是当我们使用函数时可以修改字符串.那么我们怎么说字符串是不可变的?这是一个问题采访.需要尽快回答

T.J*_*der 5

但是当我们使用函数时可以修改字符串.

不,你得到的是一个不同的字符串.例:

String a, b, c;

a = "testing 1 2 3";
b = a.substring(0, 7);  // Creates new string for `b`, does NOT modify `a`
c = a.substring(8);

System.out.println(b);  // "testing"
System.out.println(c);  // "1 2 3", proves that `a` was not modified when we created `b`
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,字符串"testing 1 2 3"被修改的substring呼叫; 相反,我们只用了一个新的字符串"testing".

String对象在Java中是不可变的,因为它们不提供修改现有String对象状态的方法.它们仅提供基于现有对象的内容创建 String对象的方法.

(当然,除非你用反射玩非常顽皮的游戏,否则上面就是这样.)

  • @HussainAkhtarWahid:在'a = a +"中的东西";`,用于指向的字符串`a`*不变,但是创建了一个*new*字符串,并且更新了`a`以指向新字符串.任何引用旧字符串的内容都不受影响.试试`String a,b; a ="一"; b = a; a = a +"两"; System.out.println(b);"`你会发现前一个字符串没有变化,而`b`仍然指向它. (4认同)