我来自C语言背景,所以我承认在Java中编写时我仍然在努力放弃内存管理。这里有一个问题出现了几次,我很想详细阐述一下。这里有两种方式来写相同的程序,唯一的区别是,当double[] array
声明:在Java中的for循环中声明数组有多糟糕?
代码示例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 ......介意拉出这个答案? – PengOne
恩,@马克的答案更好。 ;) –