2012-11-21 6 views
3

은 불필요한 메모리 사용을for-each 루프에서 배열을 어디에서 초기화해야합니까?

String[] words = text.split(" "); 
    for (String s : words) 
    {...} 

을 만들 다음겠습니까 또는 다음 전화 text.split(" ") 루프가

for (String s : text.split(" ")) 
    {...} 

반복 될 때마다 더욱 바람직 될 것입니다 어떤 방법으로?

+0

이 컨벤션 질문을 코딩처럼 소리 대답은 매우 주관적이다. 개인적으로 나는 첫 번째 방법을 선호합니다. – nhahtdh

+0

두 솔루션 모두 비슷한 양의 메모리를 사용합니다. –

답변

6

는 루프를 작성하는 각각의 방법에 흑자가 있습니다

  • 첫 번째 방법이 더 디버깅입니다 : 당신은 for에 중단 점을 설정하고, 두 번째 방법은 이름을 소개하는 것을 피한다 words
  • 검사 할 수 있습니다 words을 네임 스페이스에 추가하면 다른 곳에서이 이름을 사용할 수 있습니다. split가 루프를 시작하기 전에 한 번 호출됩니다, 그래서 두 번째 코드를 사용하여 더 성능이나 메모리 사용량 결과가 없습니다 :

는 지금까지 성능과 가독성이가는대로, 두 가지 방법이 동등하게 좋다. , 성능면에서 차이를 프로그래머 없기 때문에

+2

http://ideone.com/Msmnxu는 split()이 한 번만 호출됨을 증명합니다. – Maz

+1

메모리 사용량에 차이가 없습니다. –

1

내가 생각 : 당신은 여전히 ​​학습과 데이터 조작에 대한 text.split(" ")에 의해 생성 된 단어를 사용할 수 있기 때문에

String[] words = text.split(" "); 
for (String s : words) 
{...} 

가 사용 바람직합니다. for 루프 내에서만 사용할 수있는 두 번째 방법입니다.

0

다음 코드에서 getList()는 한 번만 호출됩니다. 그래서 두 가지 방법에 대해 성능면에서 차이가 없다고 생각합니다.

class Test { 

    static int[] list = {1,2,3,4,5}; 

    static int[] getList() { 
     System.out.println("getList executed"); 
     return list; 
    } 

    public static void main(String[] args) { 
     for(int n: getList()) { 
      System.out.println("n = "+n); 
     } 
    } 
} 

출력 :

getList executed 
n = 1 
n = 2 
n = 3 
n = 4 
n = 5 
관련 문제