为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦大神们看看


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
提交
取消
Java入门第二季 升级版
  • 参与学习       529963    人
  • 解答问题       6086    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

麻烦大神们看看

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信