2016-04-14 8 views
-1

Stringは変更不可能であり、値は変更できませんが、StringBufferの値はメソッドパラメータのように送信されたときに変更されません。私の理解から、それは新しい価値 "bb"で変わったはずです。ご協力ありがとうございました。StringBufferメソッドのパラメータ - 値が変更されない

class Ideone { 

    public static void main (String[] args) { 

     String s = "aa"; 
     StringBuffer sb = new StringBuffer("aa"); 
     modify(s, "bb"); 
     modify2(sb, "bb"); 
     System.out.println(s); 
     System.out.println(sb); 
    } 

    public static void modify(String s, String ss) { 
     s = ss; 
    } 

    public static void modify2(StringBuffer sb, String ss) { 
     sb = new StringBuffer(ss); 
    } 
} 

答えて

0

Javaで普遍的なルールを使用すると、メソッドに渡されたオブジェクトの参照を変更することはできませんが、その内容を変更することができるということです。

public static void modify2(StringBuffer sb, String ss){ 

この方法はStringBuffer参照コピーをとります。オブジェクトを指すように参照を変更しても、元のオブジェクトには何の影響もありません。しかし、それを実装した場合、

sb.clear(); 
sb.append(ss); 

となります。

また、メソッドに渡されたオブジェクトを=に再割り当てすると、元のオブジェクトに何も行われませんが、そのオブジェクトの内容を正しく変更できます。

+0

これはsb.setLength(0)で処理されました。 sb.append(ss);ありがとう、 – bluesony

+0

はい、それは同等でしょう。 –

関連する問題