2016-04-14 29 views
-1

String öğesinin değişmez olduğunu ve değerinin değiştirilemediğini biliyorum, ancak neden bir yöntem parametresi gibi gönderildiğinde, aşağıdaki StringBuffer değerinin değeri değişmiyor. Anlayışımdan yeni değer "bb" ile değişmiş olmalı. Yardımın için teşekkürler.StringBuffer method parametresi - değeri değiştirmiyor

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); 
    } 
} 

cevap

0

Java evrensel kural bir yönteme geçirilen bir nesnenin referansını değiştiremezsiniz, ama onun içeriğini değiştirebilir olmasıdır.

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

Bu yöntem bir StringBuffer bir referans arasında kopya alır. Bir nesneyi işaret etmek için bu referansı değiştirmek, orijinal nesne üzerinde hiçbir etkisi yoktur. Ancak,

'u uyguladıysanız, bu işe yarar. Yine, kural = ile bir yönteme geçirilen bir nesneyi yeniden atamak, orijinal nesneye hiçbir şey yapmaz, ancak bu nesnenin içeriğini değiştirebilirsin.

+0

sb.setLength (0) ile çalıştı; sb.append (P); teşekkürler – bluesony

+0

Evet, bu eşdeğer olurdu. –

İlgili konular