4 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
方法定義實(shí)際上就是通過將兩個(gè)字符流然后轉(zhuǎn)換成一個(gè)字符流。
代碼如下:
static StringBuffer append(StringBuffer a,StringBuffer b){
a.append(b);
b=a;
System.out.println("b="+b.toString());
return b;
}

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
不知道你怎么理解引用
static void method(StringBuffer x,StringBuffer y){
y這個(gè)參數(shù)開始引用的是StringBuffer b
在y=x 這個(gè)語句后引用的就是a了
這并不會(huì)改變 在main方法中b的引用
結(jié)果是沒有錯(cuò)的

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
是這樣的,假設(shè)
new StringBuffer (“A”); 為內(nèi)存1
new StringBuffer (“B”); 為內(nèi)存2
a - 內(nèi)存1
b- 內(nèi)存2
方法的參數(shù)是引用的復(fù)制。雖然指向的是同一內(nèi)存區(qū)域,但卻是不同的句柄。
operate (StringBuffer x, StringBuffer y)
x - 內(nèi)存1
y- 內(nèi)存2
當(dāng) y = x時(shí),你是改變了 y 的引用指向,而不是 b 的,這里你操作這塊內(nèi)存是沒有問題的,但你這樣改變了引用的指向,也就是
x - 內(nèi)存1
y- 內(nèi)存1
這樣對(duì)B指向的內(nèi)存沒有影響。
稍改了一下你代碼,你看一下,這時(shí)Y已指向內(nèi)存1了。
-------------
public class Foo {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);
System.out.println(a + "," + b);
}
static void operate(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
y.append("C");
}
}
ABC,B

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
這么解釋吧,java里面的方法的參數(shù),只是把當(dāng)前對(duì)象指向的地址給參數(shù),
你的這個(gè)方法里
StringBuffer a=new StringBuffer("A");
//這一行,假設(shè)a指向了內(nèi)存地址為4000的地方
StringBuffer b=new StringBuffer("B");
//這一行,假設(shè)b指向了內(nèi)存地址為5000的地方
method(a,b);
//這個(gè)方法只是把a(bǔ)和b的地址傳了過去。x指向4000,y指向5000,a與b還是指向原來的地址。
x.append(y);
//這句將a指向地址的內(nèi)容變了。
y=x
//只是將y指向的地址發(fā)生變化,變?yōu)?000,而main程序中的b還指向5000
所以在main程序中輸出時(shí),還是B,因?yàn)槟菈K內(nèi)存的內(nèi)容沒有變化。
這么解釋明白么?
添加回答
舉報(bào)