我的代码如下
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。如何纠正此问题并将值按值传递给函数。
答案 0 :(得分:3)
您根本不会传递数组对象。您传递一个数组引用,它总是按值传递。
如果要创建数组的副本,然后将对该副本的引用传递给方法,最简单的方法可能是调用clone
:
mat(arr.clone());
请注意,在数组上调用clone()
总是会生成一个浅克隆 - 这里不相关,但如果你有一个Person[]
,它就不会创建原始数组引用的每个Person
的副本...因此调用代码不会看到对克隆数组的更改(例如clonedArray[0] = new Person()
),但对引用的对象的更改数组(例如clonedArray[1].setName("Fred")
)将通过原始数组看到,因为两个数组将引用相同的对象。
作为旁注,我强烈建议将类型信息保存在一个地方以备变量,例如: int[] arr
而不是int arr[]
。我还建议对if
,for
和while
语句使用大括号,即使正文只是一个语句。
答案 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;
}