Java 数组形参

java 基本数据类型传递参数时是值传递引用类型传递参数时是引用传递

我们根据三道问题来探索一下是什么意思。

首先来看一个问题。

问题一

以下方法调用传递给程序是什么 ?

double[] rats = {1.2, 3.4, 5.6};
routine( rats );

A、rats 的副本

B、rats 数组元素的值

C、rats 数组的引用

D、1.2

正确答案是C选项

在我们之前讲的类与对象中,有讲到引用变量与实例之间的关系。在数组的这道题中,rats就是引用变量,引用了一个数组实例,我们假设这个实例名为x,这个实例有三个连续的数据空间,依次存储了1.2、3.4、5.6三个double类型的数据。

C选项,rats数组的引用就是rats变量引用的实例,函数传进去的就是x这个实例,是正确的。

A选项,rats的副本也就是指复制一个实例x的副本。但实际不是,我们传进去的就是x这个实例,不是它的复制品,A选项是错误的。

B、D选项,并不是传递值,错误。

问题二

以下输出是什么 ?

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 ;
    }
}

A、1 2 3 4 5

B、什么都不会打印出来

C、程序将因运行时错误而停止。

D、0 0 0 0 0

我们假设myArray引用的数组实例名为x,调用doIt函数时,我们将实例x传递给doIt函数,这时,在doIt函数中,是谁引用数组实例x呢,显然,就是变量z。因此,此时有两个引用变量,一个是myArray,一个是z。而我们在doIt中将z引用的对象换成null,实际上myArray和实例x之间的关系并没有变化。

那么,在main函数中for循环打印myArray变量引用数组中的元素,就依次为1 2 3 4 5。

那么答案就是选项A。

B选项因为myArray变量引用不会改变,因此错误,倘若打印z变量引用数组中的元素就是。

问题三

class ChangeIt
{
    static void doIt( int[] z )
    {
        int[] A = z;
        A[0] = 99;
    }
}

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

A、1 2 3 4 5

B、99 2 3 4 5

C、 0 2 3 4 5

D、99 99 99 99 99

如问题二所言,我们将myArray引用的数组实例x传递给doIt中,z也引用了实例x,又将实例x赋值给变量A,因此我们改变A引用的实例中第一个元素的值(数组的索引从零开始),myArray引用的实例也会发生改变。

因此应该选B选项。

总结

传给函数的是数组实例,不是数组的引用变量。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值