0

, 나는 몇 가지 문자열과 같이 내에 포함 된 변경 변수를 반복적으로 생성되고있다 :자바 문자열 파라미터 설정 내 자바 도구 중 하나에서

for (String value : values) { 
    // unrelated code omitted for clarity 
    String outputValue = "blah blah blah " + foo + " blah " + bar + " blah"; 
    // code that writes out the created outputValue 
} 

나는 도움을 기울인다 그러나 이것은 "필요에 가장 적합한 방법은 아닙니다 느낀다 매개 변수 "를 의미있는 텍스트가 항상 동일하므로 생성 된 String의 의미로 사용하십시오. 그러나, 내가 이해하기 때문에, String.format 또는 이와 유사한 매개 변수를 사용하는 것이 실제로는 단순 연결보다 효율적이지 않습니다.

이러한 매개 변수화 된 문자열을 만드는 방법이 메모리보다 더 효율적입니다.

+0

런타임 동안 더 효율적인지 모르겠지만 String.format()은 입력 측면에서 더 효율적입니다. –

+0

주관적이지만 Jiri Kremser의 대답은 + 연결 시간 성능이 "String.format"과 약 5에서 6 사이의 비율로 발생한다는 것을 강조합니다. – Quetzalcoatl

답변

0

나는 이것을 이해하기 때문에이 매개 변수를 플러그 인하기 위해 String.format 또는 유사한 것을 사용하면 실제로는 단순 연결보다 효율적이지 않습니다.

어떤 증거가 있어야합니까? 그리고 앱이하는 모든 일에 비추어 걱정할 가치가 있다고 생각하는 이유는 무엇입니까? 나에게 마이크로 최적화 같은데.

귀하의 요구가 광범위 할 경우 Velocity와 같은 템플릿 솔루션을 권장합니다.

+0

이것은 hadoop 감속기에 있으며 잠재적으로 수백만 개의 문자열이 전달되므로 상처를 입히지 못하도록 개선 할 수있는 방법이 있다고 생각했습니다. String.format과 관련하여 반드시 문자열을 처리하여 이러한 매개 변수에 추가 할 위치를 식별해야합니다. 단단한 연결 일뿐입니다. – Quetzalcoatl

+0

아직 볼 수있는 증거가 없으며 "나는 그렇게 말합니다." – duffymo

+0

http://stackoverflow.com/questions/513600/should-i-use-javas-string-format-if-performance-is-important이 시간대 비율은 5 : 6입니다. – Quetzalcoatl

0

가장 효율적인 방법은 아마도 StringBuilder를 사용하는 것입니다.

StringBuilder builder = new StringBuilder("blah blah blah"); 
builder.append(yourvalue).append("blah"); 

StringBuilder가 허용하는 것은 복잡하고 값 비싼 문자열 연결을 피하는 것입니다. 마침내 완료되면 builder.toString()으로 전화하여 최종 문자열을 얻으십시오.

+0

이렇게하면 틀림없이 "깨끗한"찾고 코드가 아닌 다른 가치를 얻을 수 있습니다. 값당 동일한 문자열을 추가하지 않아도되므로 매번 새로운 작성자가 필요합니다. – Quetzalcoatl

+2

어쨌든 컴파일러가이 작업을 수행합니다. –

+0

"깨끗한"코드가 아니라 효율적인 코드입니다. 그리고 컴파일러는 이것을하지 않을 것입니다. – BlackBox

0

StringBuffer 또는 StringBuilder을 사용하여 한 줄짜리 코드를 읽는 것이 좋고 코드를 읽기 어려운 초 단점이 있습니다. 그래서이 질문에 보편적 인 대답이 없다고 생각합니다. 당신을 위해 더 가치가 무엇인지 품질에 따라 달라집니다 - 등, 그것은 당신의 응용 프로그램에서 병목 현상이 정말,이 호출되는 횟수 (가독성> 유지 보수 또는 성능),

여기

는 '좋은 summarization

+0

컴파일러는 한 줄이므로'StringBuilder'를 사용합니다. 그래서 포맷팅과'+'사이를 떠올리게됩니다. –

+0

이 특별한 경우에 +는'StringBuilder'와 동일하지만'outputValue + = "a"+ foo + "b"+ bar + "c"'가 있다면 그렇지 않습니다. 명시 적으로 언급하고 후드 아래서 어떤 마법에 의존하지 말고 싶습니다. –

-1

돈이다 +와 문자열 연결 (특히 루프에서) 대신 String.format 또는 StringBuilder.append을 사용하여 이것을 최적화하려고 시도하십시오.

+0

StringBuilders는 여기 해결책이 아닙니다. 여기에서 진행되는 동일한 문자열에 반복적 인 추가가 없습니다. 매번 새로운 문자열이며, 어쨌든 StringBuilders가 연결을 처리하고 있습니다. – Quetzalcoatl

+0

이것은 한 줄이고, 컴파일러는'StringBuilder'를 사용할 것입니다. OP가 지적했듯이,'String.format'은이 경우'+'보다 느립니다 (컴파일러는'StringBuilder'를 대신 할 것입니다). –