HelloMyCode 2019-10-28 17:17 采纳率: 0%
浏览 687

关于java数组引用传递的问题

class TestIt
{
    public static void main ( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        ChangeIt.doIt( myArray );
        for(int j=0; j<myArray.length; j++)
            System.out.print( myArray[j] + " " );
    }
}
class ChangeIt
{
    static void doIt( int[] z ) 
    {
        z = null ;
    }
}

输出的值是 1 2 3 4 5

为什么不报空指针错误?我的理解是地址指向null以后myArray就是null了,难道是z和myArray其实是【值传递?】,z和myArray指向同一个地址,然后只是z的地址值被赋值为null了,通过相同的地址改变地址中存放的内容才能真正改变myArray的值?不知道是否是这样理解的,请各位大神指点迷津。

以下代码为对比:

class Test
{
     static void doIt( int[] z ) 
    {
        for(int i=0;i<z.length;i++)
                z[i]=i+2;//单个赋值
    }
    public static void main ( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        Test.doIt( myArray );
        for(int j=0; j<myArray.length; j++)
            System.out.print( myArray[j] + " " );
    }
}

输出的值是2 3 4 5 6

class Test
{
     static void doIt( int[] z ) 
    {
        for(int num:z)
            System.out.print(num+" ");
        int[] temp={2,3,4,5};
        z=temp;//整体赋值
        System.out.println();
        for(int num:z)
            System.out.print(num+" ");
    }
    public static void main ( String[] args )
    {
        int[] myArray = {1, 2, 3, 4, 5};
        Test.doIt( myArray );
        System.out.println();
        for(int j=0; j<myArray.length; j++)
            System.out.print( myArray[j] + " " );
    }
}

输出的值:

1 2 3 4 5

2 3 4 5

1 2 3 4 5

  • 写回答

4条回答 默认 最新

  • _鹿慕溪水 2019-10-28 17:30
    关注

    你的数组传给了方法,你的z=null只是把z这个地址对应的值设为了null,也就是让z指向了null,而没有改变array内部的值,myArray指向的依然是你的数组,而这个数组的值并没有发生任何变化

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?