代码中string和stringbuilder有什么不同?

时间:2017-06-26 08:17:15

标签: java

我想知道为什么这段代码的输出是"咆哮咆哮!!!"不是"咆哮!!!怒吼!&#34 ;? 代码是:

 public class Lion 
 {
   public void roar(String roar1, StringBuilder roar2) {
   roar1.concat("!!!");
   roar2.append("!!!");
 }
 public static void main(String[] args)
{
  String roar1 = "roar";
  StringBuilder roar2 = new StringBuilder("roar");
  new Lion().roar(roar1, roar2);
  System.out.println(roar1 + " " + roar2);
} }

我试图找到方法concat()的原因不要将一个String附加到另一个的末尾。请解释一下。

2 个答案:

答案 0 :(得分:0)

这里roar1是你的字符串变量,而roar2是你的类字符串构建器的对象,只有字符串构建器是可变的,字符串不能变异....因此只有类字符串构建器concate中的内置函数才能工作对象咆哮2。

Roar1不是字符串构建器的对象,因此concate函数不会对它起作用。

答案 1 :(得分:0)

如前所述,String类的对象总是不可变的。 此外,您必须记住JAVA中的变量如何传递给某些方法。 在您的情况下,您构建一个String和一个StringBuilder,并将它们传递给您的roar()方法。 JVM将创建两个引用两个orignal对象的新变量。由于本地String变量的不可变性,如果要更改此Object,将创建一个新Object。 String对象的append()方法,通常使用您所做的更改创建并返回一个新的String实例。您没有关于此Object的引用。即使您的本地String引用此对象,roar()方法之外的String Variable仍引用旧String(“roar”)。 这就是您的System.out.println没有显示您所做的更改的原因。