<全文仅为个人学习记录,如有错误欢迎指正>
直接来看一道题。
说出下列E类中【代码1】~【代码3】的输出结果。
【答案】
1
121
121
class Fish {
int weight = 1;
}
class Lake {
Fish fish;
void setFish(Fish s){
fish = s;
}
void foodFish(int m) {
fish.weight=fish.weight+m;
}
}
public class E {
public static void main(String args[]) {
Fish redFish = new Fish();
System.out.println(redFish.weight); //【代码1】
Lake lake = new Lake();
lake.setFish(redFish);
lake.foodFish(120);
System.out.println(redFish.weight); //【代码2】
System.out.println(lake.fish.weight); //【代码3】
}
}
部分代码注释如下:
class Fish {
int weight = 1;
}
class Lake {
Fish fish; //声明一个对象fish
void setFish(Fish s){ //定义一个方法setFish
fish = s;
}
void foodFish(int m) { //定义一个方法foodFish
fish.weight=fish.weight+m;
}
}
public class E {
public static void main(String args[]) {
Fish redFish = new Fish(); //声明一个对象redFish并创建
System.out.println(redFish.weight); //【代码1】
Lake lake = new Lake();
lake.setFish(redFish); //将redFish赋给s
lake.foodFish(120); //将120赋给变量m
System.out.println(redFish.weight); //【代码2】
System.out.println(lake.fish.weight); //【代码3】
}
}
新手入门的话最好画个图帮助理解
右图是执行lake.setFish(redFish);之后的示意图
0.【代码一】输出的redFish.weigh就是最初的1
1.redFish和lake都是被声明的对象并且都被创建
2.执行lake.setFish(redFish);后,s被修改为redFish,同时fish也被修改为redFish
3.此时存在相同的引用 ,即fish.weight和redFish.weigh有相同的变量
4:120赋值给m后,fish.weight的值被修改为121
5.【代码二】redFish.weight就输出121
6.【代码三】因为lake.fish.weight和redFish.weight有相同的实体,所以也输出121
............................................................分割线...................................................................................
<当前时间十点五十,睡觉了 晚安>