자바 5.0 문자열 작업 최적화
테스트 코드
String s1="********";
s1+="--------";
s1+="^^^^^^^^";
StringBuilder s2=new StringBuilder("********");
s2.append("--------");
s2.append("^^^^^^^^"); 대응 하 는 class 파일 키워드 코드
astore_1 [s1]//s1
3 new java.lang.StringBuilder [18]//JVM s1 StringBuilder
6 dup
7 aload_1 [s1]
8 invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [20]
11 invokespecial java.lang.StringBuilder(java.lang.String) [26]
14 ldc <String "--------"> [29]
16 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]// “+”
19 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [35]// String
22 astore_1 [s1]
23 new java.lang.StringBuilder [18]// string StringBuilder,
26 dup
27 aload_1 [s1]
28 invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [20]
31 invokespecial java.lang.StringBuilder(java.lang.String) [26]
34 ldc <String "^^^^^^^^"> [39]
36 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]
39 invokevirtual java.lang.StringBuilder.toString() : java.lang.String [35]
42 astore_1 [s1]
43 new java.lang.StringBuilder [18]// StringBuilder ,
46 dup
47 ldc <String "********"> [16]// StringBuilder , String StringBuilder , append。
49 invokespecial java.lang.StringBuilder(java.lang.String) [26]
52 astore_2 [s2]
53 aload_2 [s2]
54 ldc <String "--------"> [29]
56 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]
59 pop
60 aload_2 [s2]
61 ldc <String "^^^^^^^^"> [39]
63 invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31] 이렇게 하면 기본적으로 결론 을 얻 을 수 있다.5.0 이후 버 전에 서 String 에 대해'+'작업 을 직접 하면 자바 컴 파 일 러 는 StringBuilder 로 최적화 한 다음 에 append 작업 을 한 다음 에 왔다갔다 하 는 String<--->StringBuilder 의 전환 을 하고 StringBuilder 를 사용 하면 계속 append 를 직접 StringBuilder--->String 의 전환 을 할 수 있다.따라서 효율 적 으로 String 의'+'작업 은 간결 하고 1.4 이전 버 전의 String 대상 재 생 성 작업 보다 개선 되 었 지만 효율 적 으로 String Builder 와 어느 정도 차이 가 있 고 구체 적 인 차이 가 얼마나 큰 지 아래 에 테스트 코드 를 마음대로 썼 다.
String str1="";
long start=System.currentTimeMillis();
for (int i = 0; i < 20000; i++) {
str1+="test";
}
str1+="--------";
long end=System.currentTimeMillis();
System.out.println("String "+(end-start));
//StringBuilder
start=System.currentTimeMillis();
StringBuilder builder=new StringBuilder();
for (int i = 0; i < 50000; i++) {
builder.append("test");
}
builder.append("--------");
builder.toString();
end=System.currentTimeMillis();
System.out.println("StringBuilder "+(end-start));
// StringBuffer
start=System.currentTimeMillis();
StringBuffer buffer=new StringBuffer();
for (int i = 0; i < 50000; i++) {
buffer.append("test");
}
buffer.append("--------");
buffer.toString();
end=System.currentTimeMillis();
System.out.println("StringBuffer "+(end-start)); 결과:
String 소모 시간 7202 StringBuilder 소모 시간 16StringBuffer 소모 시간 0
StringBuilder 는 스 레 드 가 안전 하지 않 습 니 다.StringBuffer 는 스 레 드 가 안전 합 니 다.이치 상 StringBuilder 는 StringBuffer 보다 빠 를 것 입 니 다.하지만 결 과 는 좀 의외 입 니 다.테스트 횟수 가 적은 이유 일 수도 있 습 니 다.설 이 되 었 으 니 이렇게 많이 쓰 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.