Programming

Java에서 StringBuilder를 사용하는 경우

procodes 2020. 3. 4. 07:46
반응형

Java에서 StringBuilder를 사용하는 경우


이 질문에는 이미 답변이 있습니다.

StringBuilderJava에서 문자열 연결에 for 를 사용하는 것이 일반적으로 바람직합니다 . 항상 그런가요?

의미하는 것은 : StringBuilder객체 를 생성하고 메소드를 호출 append()하고 마지막으로 toString()이미 작은 문자열보다 +두 문자열 연산자로 기존 문자열을 연결하는 오버 헤드입니까 아니면 두 개 이상의 문자열에만 권장됩니까?

그러한 임계 값이 있다면 무엇에 의존합니까 (어쩌면 문자열 길이이지만 어떤 방식으로)?

마지막으로, 2 개, 3 개 또는 4 개의 현과 같은 작은 경우 +의 성능을 위해 연결 의 가독성과 간결성을 교환 StringBuilder하시겠습니까?

StringBuilder정규적인 연결을 명시 적으로 사용하는 것은 오래된 Java 최적화 팁Java 도시 신화 에서 쓸모 없는 것으로 언급되고 있습니다.


루프에서 문자열 연결을 사용하면 이런 식으로

String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

당신은 사용해야합니다 StringBuilder(없는 StringBuffer대신의) String훨씬 빠르며 소비하는 적은 메모리 때문에.

하나의 진술이 있다면

String s = "1, " + "2, " + "3, " + "4, " ...;

String컴파일러는 StringBuilder자동으로 사용하기 때문에 s 를 사용할 수 있습니다 .


랄프의 대답은 훌륭합니다. 오히려 StringBuilder 클래스를 사용하여 String을 작성 / 장식하는 데 사용합니다.

public String decorateTheString(String orgStr){
            StringBuilder builder = new StringBuilder();
            builder.append(orgStr);
            builder.deleteCharAt(orgStr.length()-1);
            builder.insert(0,builder.hashCode());
            return builder.toString();
}

문자열 자체가 아닌 문자열을 빌드하기 위해 도우미 / 빌더로 사용할 수 있습니다.


일반적으로 읽기 쉬운 코드를 사용하고 성능에 문제가있는 경우에만 리 팩터하십시오. 이 특정 경우에, 가장 최근의 JDK는 실제로 어떤 경우에도 StringBuilder 버전으로 코드를 최적화합니다.

루프 또는 컴파일러가 쉽게 최적화 할 수없는 복잡한 코드에서 문자열 연결을 수행하는 경우 일반적으로 수동으로 수행하면됩니다.


http://www.javaspecialists.eu/archive/Issue068.htmlhttp://www.javaspecialists.eu/archive/Issue105.html을 살펴보십시오 .

사용자 환경에서 동일한 테스트를 수행하고 새로운 JDK 또는 Java 구현이 더와 문자열 작업의 몇 가지 유형을 할 경우 확인 String또는 더 나은와 StringBuilder.


일부 컴파일러는 문자열 연결을 StringBuilder와 동등한 것으로 대체하지 않을 수 있습니다. 컴파일 시간 최적화에 의존하기 전에 소스에서 사용할 컴파일러를 고려해야합니다.


+ 연산자는 public String concat(String str)내부적으로 사용합니다 . 이 방법은 두 문자열의 문자를 복사하므로 두 문자열의 길이에 비례하여 메모리 요구 사항과 런타임 복잡성이 있습니다. StringBuilder가 더 효율적으로 작동합니다.

그러나 여기 에서 + 연산자를 사용하는 연결 코드가 포스트 Java 4 컴파일러에서 StringBuilder로 변경된다는 것을 읽었습니다 . 따라서 이것은 전혀 문제가되지 않을 수 있습니다. (내 코드 에서이 문장에 의존하면이 문장을 실제로 확인해야합니다!)


두 문자열의 concat이 빠르면 다른 경우 StringBuilder가 더 나은 선택입니다. 연결 연산자 (+) 대 concat ()의 설명을 참조하십시오.


문자열 연결의 문제점은 연관된 모든 비용으로 문자열 오브젝트를 복사한다는 것입니다. StringBuilder는 스레드로부터 안전하지 않으므로 Java 5보다 우선적으로 선호되는 StringBuffer보다 빠릅니다. 일반적으로 루프에서 문자열 연결을 수행하면 안되며 자주 호출됩니다. 나는 여기에 몇 가지 연결을 수행한다고 생각하며 수백 가지를 이야기하지 않는 한 당신을 해치지 않을 것입니다. 물론 이것은 성능 요구 사항에 달려 있습니다. 실시간 작업을하는 경우 매우주의해야합니다.


Microsoft 인증 자료는 이와 동일한 질문을 다룹니다. .NET 환경에서 StringBuilder 객체의 오버 헤드는 2 개의 String 객체를 간단하게 연결하여 더 효율적입니다. Java 문자열에 대해서도 비슷한 대답을 가정합니다.

참고 URL : https://stackoverflow.com/questions/4645020/when-to-use-stringbuilder-in-java



반응형