在修改参数后让方法返回作为参数传递给它的内容是一种不好的做法吗?
public int[] arrayLeftRotation(int[] x) {
for(int i=0;i<x.length;i++){
x[i]=1;
}
return x;
}
与修改并返回参数的副本相反。
public int[] arrayLeftRotation(int[] x) {
int[] y = x;
for(int i=0;i<y.length;i++){
y[i]=1;
}
return y;
}
最佳答案
如果您始终返回传递给该方法的相同数组,则无需返回它。该方法可以简单地具有 void
返回类型。
以ArrayList.toArray()
实现为例:
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
它接受数组作为输入,并可能返回相同的数组实例(修改后),但在某些情况下,它返回不同的(新)数组。这是返回数组而不是 void
返回类型的唯一原因。
顺便说一句,在第二个代码片段中,您将返回相同的数组。 int[] y = x
不会创建副本。要创建副本,请使用int[] y = Arrays.copyOf(x,x.length);
。创建副本是否有意义取决于用例。如果该方法的目的是修改输入数组(如ArrayList.toArray()
),则没有必要复制输入数组。
关于java - 返回作为参数传递给 Java 方法的内容是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870909/