亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

麻煩大神們看看


class?Fish{
	int?w?=?1;
}

class?Lake?{
	Fish?fish;
	void?setFish(Fish?s){???//Fish?s表示什么意思?
		fish?=?s;
	}
	void?foodFish(int?m){
		fish.w?=?fish.w+m;
	}
}
public?class?E?{

	public?static?void?main(String[]?args)?{
		//?TODO?Auto-generated?method?stub
		Fish?redFish?=?new?Fish();
		System.out.println(redFish.w);
		Lake?lake?=?new?Lake();
		lake.setFish(redFish);
		lake.foodFish(120);
		System.out.println(redFish.w);??//請問這個結果怎么得來?
		System.out.println(lake.fish.w);

輸出結果為1 121 121.

正在回答

2 回答

讓fish的引用指向你傳入的s的引用,

因為fish.w?=?fish.w+m,這里fish.w=1+120給w重新賦值了啊,而fish和redFish指向的是同一個對象,你改變了成員變量的值,當用redFish和lake里的fish去訪問的時候,結果自然是121

0 回復 有任何疑惑可以回復我~
#1

ShallHurk 提問者

你好,非常感謝你的回答,Fish s 還是不懂
2015-12-30 回復 有任何疑惑可以回復我~
#2

ShallHurk 提問者

還有 lake.setFish(redFish)也看不懂啊
2015-12-30 回復 有任何疑惑可以回復我~
#3

產品經理不是經理 回復 ShallHurk 提問者

Fish s 就是一個引用類型的形式參數,實際的值就是你傳進去的redFish,在java中永遠都是值傳遞。基本數據類型就是copy一份原有的數據值在傳遞給參數,而引用數據類型傳遞的是所指對象的地址值。
2015-12-30 回復 有任何疑惑可以回復我~
#4

產品經理不是經理 回復 ShallHurk 提問者

這里是lake對象在調用setFish方法,其作用是讓redFish的地址值傳遞lake對象的成員變量fish,從而實現讓fish指向redFish所指的對象。
2015-12-30 回復 有任何疑惑可以回復我~
#5

ShallHurk 提問者 回復 產品經理不是經理

謝謝。
2015-12-30 回復 有任何疑惑可以回復我~
#6

ShallHurk 提問者 回復 產品經理不是經理

你好,那Lake類中的Fish fish 又是什么意思呢?
2015-12-30 回復 有任何疑惑可以回復我~
查看3條回復

Fish s就是一個參數而已,跟int x是一樣的

redFish.w是121是因為你通過foodFish()修改了redFish這個對象的w值

0 回復 有任何疑惑可以回復我~
#1

ShallHurk 提問者

謝謝。
2015-12-30 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

麻煩大神們看看

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號