第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

求教一個(gè)關(guān)于java構(gòu)造函數(shù)中的append方法操作的問題,具體如下~

求教一個(gè)關(guān)于java構(gòu)造函數(shù)中的append方法操作的問題,具體如下~

蕪湖不蕪 2022-01-13 15:11:35
public class Test13{public static void main(String args[]){StringBuffer a=new StringBuffer("A");StringBuffer b=new StringBuffer("B");System.out.println("at first:a="+a+"\t"+"b="+b);method(a,b);System.out.println("outter:a="+a+"\t"+"b="+b);}static void method(StringBuffer x,StringBuffer y){x.append(y);y=x;System.out.println("inner:a="+x+"\t"+"b="+y);}}誰能告訴我為什么在method方法內(nèi)部x和y已經(jīng)同為“AB”,回到main后卻又成了a=AB,b=B?搞不懂。謝謝各位高手賜教。謝謝回答。我想問的是:在method方法中x.append(y)可以寫作x=x.append(y)吧為什么同樣是x=x.append(y)和y=x兩個(gè)傳值操作,x就可以作為形參傳值給main里的a,y就不能最為形參傳值給main里的b?是否和append()函數(shù)的特性有關(guān)?PS:to jonny404根據(jù)目前我所了解的一點(diǎn)java的皮毛,好像是說java采用的是傳值調(diào)用,不是采用地址調(diào)用,你的解釋是否有誤呢?
查看完整描述

4 回答

?
精慕HU

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

查看完整回答
反對(duì) 回復(fù) 2022-01-17
?
猛跑小豬

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ò)的

查看完整回答
反對(duì) 回復(fù) 2022-01-17
?
烙印99

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



查看完整回答
反對(duì) 回復(fù) 2022-01-17
?
郎朗坤

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)容沒有變化。
這么解釋明白么?


查看完整回答
反對(duì) 回復(fù) 2022-01-17
  • 4 回答
  • 0 關(guān)注
  • 236 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)