2013-07-12 65 views
1

下面是让我困惑的程序。以下程序的输出是JAVA String vs StringBuffer

The USA 
main USA 

如果我更换所有字符串的StringBuffer然后我得到 "The USA main The USA"。请帮我理解这一点。

public class Confusing { 
    public static void sss(String s1){ 
     s1= "The "+s1; 
     System.out.println(s1); 
    } 

    public static void main(String args[]){ 
     String s1 = new String("USA"); 

     sss(s1); 
     System.out.println("main "+s1); 
    } 
} 
+0

在'String'情况下,'sss'修改's1'只在'sss'的范围内。如果你使用'StringBuffer',你可以在'StringBuffer'中添加一些东西......这里的关键字是Java中'String'的不变性...... –

+0

好吧如果我把它作为“The”+ s1;而不是s1 =“The”+ s1;那么我们可以说它是由于不可变性。无论如何,我只在StringBuffer和String情况下传递参考“s1”。我仍然感到困惑。 – keyanwb

+0

但是你给StringBuffer对象添加了一些东西(我想是.append)。因为您只传递对该对象的引用,所以此更改也在'main'中可见。 –

回答

0

做正确的方式是这样的:

public class Confusing { 

    public static void sss(StringBuffer s1){ 
     StringBuffer the= new StringBuffer("the "); 

     System.out.println(the.append(s1)); 
    } 

    public static void main(String args[]){ 
     StringBuffer s1 = new StringBuffer("USA "); 

     sss(s1); 
     StringBuffer main = new StringBuffer("main "); 
     System.out.println(main.append(s1)); 
} 
} 

输出为:

the USA 
main USA