Java参数值会自行更改

时间:2014-04-22 07:05:26

标签: java

今天,在编写一个简单的程序时,我发现了一些奇怪的行为。 我编写了简单的排序方法,其中返回另一个排序数组。

public double[] sortMe(double[] array) 
{
    double[] narray=new double[array.length];
    narray=array;
    for(int i=0;i<narray.length;i++)
    {
        for(int j=0;j<narray.length;j++)
        {
            if(narray[i]<narray[j])
            {
                double temp=narray[i];
                narray[i]=narray[j];
                narray[j]=temp;
            }
        }
    }
    // TODO Auto-generated method stub
    return narray;
}

在我的驱动程序类中,当我调用此sortMe方法时,它也更新了我的testArray。由于testArray超出了sortMe方法的范围,那么当testArray被排序?

double [ ] testArray = {3, 6, 2, 5, 8, 4, 1, 7};
double [ ] results;
results = af.sortMe(testArray);
af.printMe(results);

2 个答案:

答案 0 :(得分:0)

sortMe方法中,您使用arraynarray的引用分配给narray=array;

这意味着现在narray指向与array相同的数组,因此如果修改narray,数组也会更改,因为数组只引用{{1}传递给方法,testArray也被排序。

如果您不想更改testArray,则在将testArray分配给array时,请使用narraySystem.arraycopy()的值复制到array。如下所示进行更改。

narray

答案 1 :(得分:0)

您认为这些界限如何:

double[] narray=new double[array.length];
narray=array;

它创建一个新数组,然后立即将其丢弃,并为参数数组分配相同的实例。

如果要返回一个新数组,可以在构造函数中使用它,也可以手动将数组A中的字段复制到数组B.由于您正在进行排序,您甚至可能根本不需要这样做。