在java中传递数组的值

时间:2014-10-15 05:48:13

标签: java

我的代码如下

public static int mat(final int a[]) {
    for(int i=0;i<a.length;i++)
        a[i]=a[i]+10;
    System.out.println("Mat Function");
    for(int i=0;i<a.length;i++)
        System.out.println(a[i]);
    return 1;
}

public static void main(String[] args) {
    int arr[]={1,2,3,4,5,6};

    mat(arr);
    System.out.println("Main");
    for(int i=0;i<arr.length;i++)
        System.out.println(arr[i]);
}

我的主要必须显示值1,2,3,4,5,6和mat功能必须显示11,12,13,14,15,16。但两者都显示了11,12,13,14,15,16。如何纠正此问题并将值按值传递给函数。

2 个答案:

答案 0 :(得分:3)

您根本不会传递数组对象。您传递一个数组引用,它总是按值传递。

如果要创建数组的副本,然后将对该副本的引用传递给方法,最简单的方法可能是调用clone

mat(arr.clone());

请注意,在数组上调用clone()总是会生成一个克隆 - 这里不相关,但如果你有一个Person[],它就不会创建原始数组引用的每个Person的副本...因此调用代码不会看到对克隆数组的更改(例如clonedArray[0] = new Person()),但对引用的对象的更改数组(例如clonedArray[1].setName("Fred"))将通过原始数组看到,因为两个数组将引用相同的对象。

作为旁注,我强烈建议将类型信息保存在一个地方以备变量,例如: int[] arr而不是int arr[]。我还建议对ifforwhile语句使用大括号,即使正文只是一个语句。

答案 1 :(得分:0)

假设在你的main方法中你打算打印arr数组(传递给mat方法的那个)而不是matt(从不在任何地方定义), mat方法更改该数组的内容,因此main打印更新的数组。

如果您希望mat方法不更改该数组,请创建一个新数组:

public static int mat(final int a[])
{
    int[] a2 = new int[a.length];
    for(int i=0;i<a.length;i++)
        a2[i]=a[i]+10;
    System.out.println("Mat Function");
    for(int i=0;i<a2.length;i++)
        System.out.println(a2[i]);
    return 1;
}