2014-07-24 167 views
-1

爲什麼在這段代碼中我不能交換StringBuffer的?Java通過引用傳遞

public static void main(String[] args) { 
    StringBuffer a = new StringBuffer("One"); 
    StringBuffer b = new StringBuffer("Two"); 
    swap(a, b); 
    System.out.println("a is " + a + "\nb is " + b); 
} 

static void swap(StringBuffer a, StringBuffer b) { 
    a.append(" more"); 
    b = a; 
} 
+0

@HotLicks沒有侮辱或撲,請...... – Ordous

+0

你當然可以,讓你的'swap'法「工作」,有它的交換*內容*這兩個對象。 –

+0

@有點 - 我很抱歉。他清楚地瞭解Java是如何工作的,已經深入研究了Java是通過引用還是按價值呼叫,並且正在擾亂我們的鏈條。 –

回答

0

因爲你不與變量ab的參考,但與new StringBuffer("One")new StringBuffer("Two")引用工作。

所以用b = a你不改變主要但本地副本ab

0

Java不支持通過引用,只能通過值傳遞。 StringBuffer a是一個引用,並且此引用是按值傳遞的。

請不要使用StringBuffer,因爲十年前它被StringBuilder所取代。

0
static void swap(StringBuffer a, StringBuffer b) { 
     a.append(" more"); 
     b = a; // the change is local to swap(). It doesn't affect main() 
}