海底抓鱼 2023-06-10 19:35 采纳率: 71.4%
浏览 26
已结题

这里的代码二答案为什么是121?可以帮我仔细讲讲原因吗

img


这里的代码二答案为什么是121?可以帮我仔细讲讲原因吗?→_→

  • 写回答

2条回答 默认 最新

  • a5156520 2023-06-10 19:52
    关注

    在使用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");
            
            
        }
    
    }
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月18日
  • 已采纳回答 6月10日
  • 创建了问题 6月10日