2014-07-24 144 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() 
}