java方法将数组的值更改为null

时间:2013-11-09 23:41:32

标签: java arrays null overloading

public void setData(double[] d) {
    if (d == null) {
        data = new double[0];
    } else {
        data = new double[d.length];
        for (int i = 0; i < d.length; i++)
            data[i] = d[i];
    }
}

我的代码中的这个方法用于设置数组的数据。我还需要编写一个名为reset()的方法,该方法将给定数组更改为具有空值。此外,我们正在练习本实验中的重载。 setData()有四个版本(double,int,float,long)。由于Stat类在内部使用double数组来存储值,我是否只需要生成一个double类型的reset()方法?(我想我只需要一个......)最后,请给我一些提示为了解决这个重置业务,因为我尝试过的所有事情都失败了,并且通常包含诸如此类的陈述     “setData(double [] null)”返回错误。

3 个答案:

答案 0 :(得分:1)

java中的 一切通过;偶数引用按值传递。因此,通过方法传递数组,您可以更改数组的内容,但不能更改数组指向的内容。现在,如果您在一个类中并且碰巧传递了一个您已经有权访问的实例成员,那么您将能够将该数组设置为null

如果您总是希望能够更改数组指向的内容,那么只需要一个返回数组的函数(而不是void),并将返回的值分配给感兴趣的数组。 / p>

答案 1 :(得分:0)

因为java是按值传递的,所以不能将作为参数传递的变量重新分配给方法,并期望看到该变化反映在外部。

你可以做的是将数组放在某种类似的包装类中:

class ArrayReference<T> {
  T[] array; // T would be either Double, or Long, or Integer, or whatever
}

然后:

void setData(ArrayReference<Double> myReference) {
  myReference.array = null;
}

答案 2 :(得分:0)

我不确定我是否理解你的问题,但这是你想要的吗?

public class Stat {
    private double[] data;

    public void reset() {
        data = null;
    }

    public void setData(double[] d) {
        data = (d == null) ? new double[0] : Arrays.copyOf(d, d.length);
    }
}