Java中的可变和不可变字符串有什么区别

据我所知,

可变字符串可以更改,不可变字符串不能更改。

在这里,我想像这样更改字符串的值,

String str="Good";
str=str+" Morning";

其他方式是,

StringBuffer str= new StringBuffer("Good");
str.append(" Morning");

在这两种情况下,我都试图改变 的值。谁能告诉我,这两种情况下有什么区别,并给我清晰的可变和不可变对象的图片。str


答案 1

案例1:

String str = "Good";
str = str + " Morning";

在上面的代码中,您创建了 3 个对象。String

  1. “好”它进入字符串池
  2. “早晨”它也进入了字符串池
  3. 通过连接“好”和“早晨”创建的“早安”。这个家伙在上。

注意:字符串始终是不可变的。没有,比如可变字符串。 只是一个最终指向“早安”的参考。你实际上不是在对象上工作。你有不同的对象。str13String


案例2:

StringBuffer str = new StringBuffer("Good"); 
str.append(" Morning");

StringBuffer包含一个字符数组。它与 .上面的代码将字符添加到现有数组中。实际上,它是可变的,它的表示不是。StringStringBufferString


答案 2

Java中的可变和不可变字符串有什么区别

不可变存在,可变不存在。