java字符串不可变,但代码未显示

时间:2018-07-31 16:12:03

标签: java string immutability

我正在学习字符串概念,因此编写了代码,期望得到不同的输出,但是得到了一些非常意外的信息。

class stringmute
{
    public static void main(String[] args)
    {
        String s1="Hello "; //string one.
        System.out.println("Str1:"+s1);
        String s2= s1+"world"; //New String.
        System.out.println("Str2="+s2);
        s1=s1+"World!!"; //This should produce only Hello right?
        System.out.println("Str1 modified:"+s1);

    }
}

当我执行上面的代码时,我得到的输出为:

Str1:Hello 
Str2=Hello world
Str1 modified:Hello World!!

如果我做错了什么,请告诉我。 由于字符串是不可变的,这意味着我们应该将“ Str1 Modified”的输出作为“ HELLO”而不是“ HELLO WORLD !!”。

1 个答案:

答案 0 :(得分:4)

将s1分配为:

s1=s1+"World!!";

在jvm字符串池中创建并分配给s1的新字符串。

所以它的价值变成了“ Hello World !!”