String, StringBuffer, StringBuilder의 차이점과 효율 비교

2988 단어
String은 변할 수 없습니다. StringBuffer, StringBuilder는 변할 수 있습니다.
String, StringBuffer는 라인이 안전하고 StringBuilder는 라인이 안전하지 않습니다(StringBuffer의 append 조작은synchronized를 사용했습니다)
String 대상의 직렬 연결이 가장 느리다. 단일 라인 문자열의 직렬 연결은 StringBuilder, 다중 라인 문자열의 직렬 연결은 StringBuffer
수행 시간 비교:

String s = "ja"+"va"

String s1="ja";   StringBuffer sb=new StringBuffer("va");
sb.append(s1);

String s1="ja"; 
String s2 = "va"; 
String s = s1 +s2
컴파일 단계에서 확정할 수 있는 문자열의 상수는 String이나 StringBuffer 대상을 만들 필요가 없습니다.문자열 상수의 "+"연결을 직접 사용하는 것이 가장 효율적입니다.시간적으로 ① StringBuffer 대상의 append 효율은 두 String 대상의'+'연결 작업보다 높다.시간적 ② 일반적으로 실행 시간에는 빠른에서 느린까지 StringBuilder, StringBuffer, String
다중 스레드가 아닌 문자열 버퍼는 StringBuilder를 사용하는 것이 좋습니다.
효율성 비교:
String str = "";
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
str = str + i;
}
long endTime = System.currentTimeMillis();
System.out.println ("실행 시간:"+ (endTime - beginTime);
실행 시간이 너무 길어서 프로그램 실행이 끝날 때까지 기다리지 않고 내가 바로 종료했다.
StringBuffer buffer = new StringBuffer("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 999999; i++){
buffer.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println ("실행 시간:"+ (endTime - beginTime);
출력:
실행 시간: 250
StringBuilder builder = new StringBuilder("");
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 99999; i++){
builder.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println ("실행 시간:"+ (endTime - beginTime);
출력:
실행 시간: 188
StringBuffer와 StringBuilder의 차이점: 1. StringBuffer는 단일 라인이다. 왜냐하면 그 안의 방법은synchronized에 의해 수식되었기 때문이다.그래서 라인은 안전하지만 효율은 자연히 떨어진다.StringBuffer의 append 메소드 소스를 살펴보겠습니다.
 public synchronized StringBuffer append(Object paramObject)
  {
    super.append(String.valueOf(paramObject));
    return this;
  }

2. StringBuilder는 단일 라인이 아닙니다. 왜냐하면 안의 방법은synchronized에 의해 수식되지 않았기 때문입니다.그래서 라인이 안전하지 않기 때문에 효율이 더욱 높다.StringBuilder의 append 메소드 소스를 살펴보겠습니다.
  public StringBuilder append(char paramChar)
  {
    super.append(paramChar);
    return this;
  }

수량급이 상대적으로 적을 때 StringBuffer와 StringBuilder의 차이는 크지 않고 수량급이 상대적으로 클 때만 그들 두 사람 간의 효율 차이를 체득할 수 있다.
StringBuffer가 라인 안전을 위해 일정한 효율을 희생하는 것은 필연적이다.참조:http://blog.darkmi.com/2010/08/18/1403.html

좋은 웹페이지 즐겨찾기