javac 명령 줄을 사용하여 컴파일 된 코드를 검토 한 결과 + 연산자와 문자열 연결을 사용할 때마다 컴파일 된 코드가 StringBuilder의 append() 메소드로 바뀌 었습니다. 이제 StringBuilder와 String concatenation을 사용하는 것이 유사한 바이트 코드를 가지고 있기 때문에 동일한 성능을 가지고 있다고 생각합니까? 맞습니까?java : StringBuilder로 변환 된 바이트 코드의 concat 문자열
3
A
답변
11
네, 맞습니다! 그러나 루프 안에서 연결하면 동작이 다릅니다. 예 :
String str = "Some string";
for (int i = 0; i < 10; i++) {
str += i;
}
새로운 StringBuilder
는 STR (초기 값)마다 하나의 루프 반복에서 모든 말 구성 될 초기 문자열 (str
의 초기 값과 실제로 StringBuilder
)와 연결이있을 것이다 반복.
루프에서 문자열 연결을 사용할 때만 StringBuilder를 직접 만들어야합니다.
0
주된 차이점 (컴파일러가 문자열 연결에 StringBuilder
을 사용하는 이유)은 String
이 변경 불가능하다는 반면에 StringBuilder
은 변경되지 않습니다.
예를 들어 문자열을 사용하여 s1 + s2 + s3
을 계산하려면 s1
의 문자를 두 번 복사해야합니다. 이것은 StringBuilder
을 사용하여 피할 수 있습니다.
이 최적화
명시 적으로 JLS 허용된다구현을 만든 다음 중간 String 객체를 폐기 방지하기 위해 한 번에 변환 및 연결을 수행하도록 선택할 수 있습니다. 반복되는 문자열 연결의 성능을 높이려면 Java 컴파일러에서 StringBuffer 클래스 또는 유사한 기술을 사용하여 식의 평가에 의해 생성 된 중간 String 개체의 수를 줄이십시오.
관련 문제
- 1. AS3 코드의 파일 (바이트 문자열)
- 2. Java : 바이트 코드의 새 인스턴스
- 3. 변환 문자열 [] 바이트
- 4. Java 문자열을 바이트 배열로 변환
- 5. CONCAT 문자열
- 6. CONCAT 문자열
- 7. 바이트 배열을 concat/flatten하는 방법
- 8. Java : 바이트 배열을 바이트 배열로 변환
- 9. 문자열 배열을 바이트 배열로 변환
- 10. 문자열 배열을 바이트 배열로 변환
- 11. 변환 바이트 문자열, 그리고 다시
- 12. 프로젝션의 concat 문자열 (Linq)
- 13. 추가 된 문자열을 StringBuilder로 제거
- 14. 바이트 배열을 Java 유형으로 변환
- 15. C#에서 stringbuilder로 거대한 문자열 처리하기
- 16. 바이트 코드의 유형
- 17. 대문자와 소문자가 혼합 된 문자열 변환 java
- 18. 개별 Java 바이트 코드의 실행 시간에 얼마나 차이가 있습니까?
- 19. MVC4 문자열 HTML.DisplayFor와 CONCAT 문자열
- 20. DateTime 문자열로 된 쿼리가있는 concat 문자열
- 21. concat 쉼표로 구분 된 문자열 값
- 22. 2d 배열의 concat 문자열
- 23. 변환 문자열 날짜-JAVA
- 24. 파일 -> 바이트 [] -> 문자열 -> 바이트 [] -> 파일 변환
- 25. 문자열 CONCAT 자바
- 26. TCL 문자열 concat
- 27. 동적으로 concat 문자열 자바
- 28. XSLT CONCAT 문자열
- 29. 목록이있는 Python concat 문자열
- 30. 특정 연산자가있는 concat 문자열