那本来就是我的光 2019-07-20 18:23 采纳率: 60%
浏览 333
已采纳

昨天面试,有一道面试题百思不得解,求大佬们解惑!

public class A {
    public static void main(String[] args) {
        int[] a = new int[3];
        int[] b = null;
        init(a,b);
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
    }

    private static void init(int[] a,int[] b){
        a[0] = 1;
        b = a;
        b[1] = 2;
        a = null;
    }
}

为什么输出的是[1,2,0],null
而不是[1,0,0],[1,2,0]?

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-07-20 20:45
    关注

    在init里可以修改对象的内部状态,但是让这个对象直接指向另一个对象,不会作用到调用者上。
    所以你改变了a的a[0] a[1],a[2]没有改变默认就是0,你函数里v = a,之后修改的还是a那个数组,但是这个b指向另一个对象,不会作用到main的b上,b还是null
    好比
    void init(int a, int b)
    {
    a = 1234;
    b = 4321;
    }
    main()
    {
    a = 1;
    b = 2;
    init(a,b);
    a和b还是1和2
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决