2016-10-28 2 views
2

말은 내가 (자바)재 계산 루프의 조건이나하지

String word = args[0]; 
for (int i = 0; i < word.length(); i++) {} 

내가 문자열에 .length() 메소드가 반드시 비용이 많이 드는 아니라는 것을 알고 있지만, 단지 확인해야 : 것이 다시 계산 단어입니다. for 루프의 각 패스에서 길이()? 정의하는 것이 더 좋을까요

그리고 < 길이를 루프의 조건으로 사용 하시겠습니까?

답변

3

String의 길이는 word.length()을 호출 할 때마다 계산 된 가 아닙니다.입니다. 그 이유는 String 클래스가 생성시 길이를 필드로 저장하기 때문입니다. 완료되면 동일한 성능을해야합니까

public int length() { 
    return value.length; 
} 

그래서

int length = word.length(); 
for (int i = 0; i < length; i++) {} 

일을 : 당신이 java.lang.String 클래스의 length() 메서드에 대한 코드가 표시되는 경우

, 그것은 단지이 포함 이렇게 :

,635,


또한 이전 코드는 기본적 메소드 호출에 대한 필요성을 제거하는 루프 밖에 이동 전화를 참고. 그러나 이것은 사소한 성능 향상 일 것입니다.

+4

또한,이 방법은 인라인 얻을 것이다 좋은 가능성이있다. – TheLostMind

2

Java 문자열은 상수이며 length() 메서드는 빠른 (c의 strlen과 달리) 구현됩니다. 그 코드는 괜찮을거야.

즉,이 두려움을 피하는 방법 중 하나는 0으로 계산됩니다. 단일 메서드 호출 만 만들고 0에 대한 비교가 0이 아닌 것보다 저렴하기 때문에 약간 빠릅니다. 마진율이 저렴합니다.

for (int i = word.length() - 1; i >= 0; --i) ... 

또 다른는 CharacterIterator을 사용하고 있지만, 이것에 대한 잔인한 :

CharacterIterator iter = new StringCharacterIterator(word); 
for(char c = iter.first(); c != CharacterIterator.DONE; c = iter.next()) ...