2012-02-11 2 views

답변

7

개인적으로 나는 후자를 사용하는 것 - 그것은 명확하게 그리고 실제로 효율적입니다 :

  • 대신 그것은 원 StringBuffer
  • 의 동기화되지 않은 StringBuilder 유형을 사용합니다 자바의 현대 버전 ' "Price: " + price"Description: " + description + ";"에 대한 중간 문자열을 구성해야합니다.

Java 5 이상에서는 후자의 코드가 필요합니다. 그러나 두 번째 양식의 선명도는

public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    builder.append("Description: "); 
    builder.append(description); 
    builder.append(";"); 
    builder.append("Price"); 
    builder.append(price); 
    return builder.toString(); 
} 

중요한 점이다 - 나는 확실히 훨씬 간단 처음보다 읽기 찾을 : 컴파일. 하나의 흥미로운 점은 컴파일 된 버전에서 문자열 상수를 추가하기위한 두 번의 연속 호출이 있다는 것입니다 (확인했습니다). 더 읽기, IMO 및 - - 그것은 약간 더 효율적이 될 것이다 쓰기 : 그것은 모두 documentation에 따라 같은 컴파일 된 이후

public String toString() { 
    return "Description: " + description + ";Price: " + price; 
} 
3

모두가 '+'연산자와 동일 *, 연결되어 효과적으로 StringBuffer에로 확장 첫 번째 예로서 주었다 구성 :하지만 이유를 사용하는 것이 좋습니다 어느 실현하는 것이 모른다 .

EDIT : 사실 자바 5부터는 StringBuffer가 아니라 StringBuilder입니다. 유일한 차이점은 후자는 스레드로부터 안전하며 추가 잠금없이 여러 스레드에서 액세스 할 수 있다는 것입니다. 그럼에도 불구하고 개체가 서로 다른 스레드간에 공유되지 않을 때마다 StringBuilder를 사용하여 동기화 오버 헤드를 방지해야합니다.

(*) append 메소드에서 추가 연결을 중첩하면 Jon Skeet이 지적한 것처럼 불필요한 임시 문자열이 생성 될 수 있습니다. 코드에서 알지 못했습니다. 내 잘못이야.

+1

하지 않습니다. StringBuffer가 더 최적화되었습니다. – madmik3

+1

Java (5+)의 최신 버전은 실제로 ['StringBuffer'] 대신 ['StringBuilder'] (http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)을 사용합니다. (http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html)에서 동기화의 오버 헤드를 피하기 위해'+'연산자로'String' 연결을 사용합니다. – Jeffrey

+0

@ madmik3 여기에 대한 자료가 있습니까? –

0

그것은 단지 개인적인 취향이있다 :

문자열 버퍼는 컴파일러에서 이진 문자열 연결 연산자 +를 구현하는 데 사용됩니다. 예를 들어, 코드 : 또한

x = "a" + 4 + "c" is compiled to the equivalent of: 

x = new StringBuffer().append("a").append(4).append("c") 
         .toString()  

, 난 당신의 방법보다 @Override를 넣어 것입니다.

0

일반적으로 StringBuffer 또는 StringBuilder를 사용하는 것이 좋습니다. StringBuffer와 StringBuilder의 차이점은 StringBuffer가 동기화된다는 것입니다. 귀하의 예에서는 StringBuilder를 권하고 싶습니다.

StringBuilder는 할당 빈도가 적으며이 작업을 많이 수행 할 때 속도와 메모리 관리가 크게 향상 될 수 있습니다.

여기에이 주제에 대한 더 많은이 읽어 보시기 바랍니다 : 같은

Why to use StringBuffer in Java instead of the string concatenation operator

관련 문제