我见过两种一般类型的方法,其目标是返回一组值。首先是最明显的:返回数组vs阵列
public double[] getArray() {
...
return ...;
}
但是,我也看到了方法,填补作为参数传递阵列,如AffineTransform.getMatrix()
:
public void getMatrix(double[] flatmatrix) {
...
flatmatrix[0] = ...;
....
}
什么是每种方法的利弊,哪种情况更适合?此外,使用第二种方法背后的逻辑是什么,而不仅仅是使用第一种方法?
但是你必须创建一个数组传递给方法。例如'double [] matrix = new double [16]; getMatrix(matrix);'如果你可以在随后的调用中重新使用数组,它只会节省分配。 – weston
感谢您的链接;如果我找到了他们,我可能不会问我的问题!记忆储存逻辑就是我猜到的,但当我在AffineTransform中找到该方法时,我仍然认为这很奇怪。 (有些io类也做同样的事情)它也使我很难找到我在JavaDoc中寻找的东西,因为我正在寻找一个返回double []的方法,而不是找到void。 – ostrichofevil
如果您传递或返回对像数组这样的对象的引用,那么收件人可以修改原始对象。如果复制对象,则收件人无法修改原始对象。深度副本可防止修改传入实例引用的对象。这被称为“防御性复制”,通常在程序正确性和可维护性比微优化更重要的情况下更好。 –