나는 C 배경에서 왔습니다. 그래서 저는 여전히 자바로 글을 쓸 때 메모리 관리를 허락하지 않으려 고합니다. 몇 가지 문제가 있습니다. 몇 가지 문제가 있습니다.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
}
}
여기에, 유일한 차이점은 double[] array
가 선언되는 동일한 루틴을 작성하는 두 가지 방법이 있습니다 private double[] calculateSomethingAndReturnAnArray(int i)
은 항상 동일한 길이의 배열을 반환합니다. 코드 샘플 2으로 혐오감을 갖습니다. 기존 배열을 덮어 쓸 수있을 때마다 각 반복마다 새 배열을 만들기 때문입니다. 그러나 나는 이것이 내가 앉아서 Java가 상황을 처리하도록해야하는 시대 중 하나라고 생각합니다.
다른 방법보다 한 가지 방법을 선호하거나 Java에서 진정으로 동일한 이유는 무엇입니까?
두 시나리오 모두에서 새 배열을 만듭니다. 당신은 단지 * 첫 번째 샘플에서 배열을 한 번만 선언하는 것입니다 (저장소는 단지 참조이므로 32 비트입니다). 그러나 아마도'calculateSomethingAndReturnAnArray'는 항상 새로운 배열을 인스턴스화합니다. 이것은 실제 비용이있는 곳입니다. –
@Kirk ... 대답을 꺼내는 마음? – PengOne
Meh, @ Mark의 대답은 훨씬 좋습니다. ;) –