2016-04-14 16 views
-1

Ich weiß, dass String unveränderlich ist und der Wert kann nicht geändert werden, aber warum ändert sich der Wert der folgenden StringBuffer nicht, wenn sie wie ein Methodenparameter gesendet wird. Aus meiner Sicht sollte es sich mit dem neuen Wert "bb" geändert haben. Danke für Ihre Hilfe.StringBuffer-Methode Parameter - ändert sich nicht Wert

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

Antwort

0

Die allgemeine Regel in Java ist, dass Sie nicht die Referenz eines in ein Verfahren übergebene Objekt ändern kann, aber man kann seine Inhalte ändern.

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

Diese Methode verwendet ein eine Referenz auf ein StringBuffer kopieren. Wenn Sie diese Referenz so ändern, dass sie auf ein Objekt zeigt, hat dies keinerlei Auswirkungen auf das ursprüngliche Objekt. Aber wenn Sie es als

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

implementieren, dann würde es funktionieren.

Die Regel besteht darin, dass die Neuzuweisung eines Objekts, das an eine Methode übergeben wird, mit = nichts zum ursprünglichen Objekt macht, aber Sie können den Inhalt dieses Objekts einfach ändern.

+0

es arbeitete mit sb.setLength (0); sb.append (ss); danke – bluesony

+0

Ja, das wäre gleichwertig. –