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

关于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指向的依然是你的数组,而这个数组的值并没有发生任何变化

    评论

报告相同问题?

悬赏问题

  • ¥50 安装华大九天aether
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证