【发布时间】:2011-09-01 22:51:37
【问题描述】:
我来自 C 背景,所以我承认在用 Java 编写时我仍然在为放弃内存管理而苦苦挣扎。这是一个已经出现过几次的问题,我很想详细说明一下。以下是编写相同例程的两种方法,唯一的区别是声明 double[] array 的时间:
代码示例 1:
double[] array;
for (int i=0; i<n; ++i) {
array = calculateSomethingAndReturnAnArray(i);
if (someFunctionOnArrays(array)) {
// DO ONE THING
} else {
// DO SOME OTHER THING
}
}
代码示例 2:
for (int i=0; i<n; ++i) {
double[] array = calculateSomethingAndReturnAnArray(i);
if (someFunctionOnArrays(array)) {
// DO ONE THING
} else {
// DO SOME OTHER THING
}
}
这里,private double[] calculateSomethingAndReturnAnArray(int i) 总是返回一个相同长度的数组。我对 代码示例 2 有强烈的反感,因为它会为每次迭代创建一个新数组,而它可能只是覆盖现有数组。但是,我认为这可能是我应该坐下来让 Java 为我处理这种情况的时候之一。
选择其中一种方法而不是另一种方法的原因是什么,或者它们在 Java 中是否真的相同?
【问题讨论】:
-
您在这两种情况下都创建了一个新数组。您只是在第一个样本中声明数组一次(其存储空间为 32 位,因为它只是一个参考)。但大概
calculateSomethingAndReturnAnArray总是在实例化一个新数组,这才是真正的成本所在。 -
@Kirk...介意把这个拿出来作为答案吗?
-
嗯,@Mark 的回答更好。 ;)
-
@Kirk:两者都非常有帮助。谢谢。