
这里的代码二答案为什么是121?可以帮我仔细讲讲原因吗?→_→
在使用setFish()方法后,lake对象的成员变量fish的值变为了对象redFish,然后foodFish()方法让对象fish (也就是redFish对象)的成员变量weight变为了121;
通过打印下各方法中对象redFish和对象lake.fish的地址,发现都是一样的,它们都是指向同一个对象,所以其成员变量的值也会是一样的。
测试代码如下:
参考链接:
https://blog.csdn.net/qq_21963133/article/details/80624091
class Fish{
int weight=1;
}
class Lake{
Fish fish;
void setFish(Fish s) {
fish=s;
System.out.println("in setFish() , 对象fish的地址是:"+ System.identityHashCode(fish));
System.out.println("in setFish() , fish.weight="+fish.weight+"\n");
}
void foodFish(int m) {
fish.weight=fish.weight+m;
System.out.println("in foodFish() , 对象fish的地址是:="+System.identityHashCode(fish));
System.out.println("in foodFish() , fish.weight="+fish.weight+"\n");
}
}
public class E {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fish redFish = new Fish();
// https://blog.csdn.net/qq_21963133/article/details/80624091
//System.out.println("in setFish() , redFish.hashCode()="+redFish.hashCode());
System.out.println("in main , 对象redFish的地址是:"+System.identityHashCode(redFish));
System.out.println("in main , redFish.weight="+redFish.weight+"\n");
Lake lake = new Lake();
lake.setFish(redFish);
lake.foodFish(120);
//System.out.println(redFish.weight);
System.out.println("in main , 对象redFish的地址是:"+System.identityHashCode(redFish));
System.out.println("in main , redFish.weight="+redFish.weight+"\n");
// System.out.println(lake.fish.weight);
System.out.println("in main ,对象lake.fish的地址"+System.identityHashCode(lake.fish));
System.out.println("in main , lake.fish.weight="+lake.fish.weight+"\n");
}
}
