>Java >java지도 시간 >JAVA에서 String과 StringBuffer의 차이점

JAVA에서 String과 StringBuffer의 차이점

巴扎黑
巴扎黑원래의
2016-12-20 11:38:15899검색

String과 StringBuffer의 차이점에 대한 정보는 인터넷에 셀 수 없이 많지만, 이 글을 보고 그 안에 있는 작은 예들이 매우 대표적이라고 느껴져서 직접 참고하여 요약해 보았습니다.

자바에는 문자 연산을 담당하는 세 가지 클래스가 있습니다.

1.Character는 단일 문자에 대해 작동하고

2.String은 문자열에 대해 작동합니다. 불변 클래스.

3.StringBuffer도 문자열에 대해 작동하지만 변수 클래스입니다.

String:
은 기본 유형이 아닌 객체입니다.
은 일단 생성되면 해당 값을 수정할 수 없습니다.
기존 String 객체에 대한 수정은 모두 새로운 것입니다. 새 개체를 만들고 새 값을 저장합니다.
String은 최종 클래스입니다. 즉,

StringBuffer:
는 수정될 때 변경 가능한 개체입니다. 객체는 String처럼 다시 생성되지 않습니다
생성자
StringBuffer sb = new StringBuffer();
참고: 값 기호
sb를 통해서만 생성할 수 있습니다. = "welcome to here!";//error
객체가 생성된 후 메모리 공간이 메모리에 할당되고 처음에는 StringBuffer
에 값을 지불할 때 해당 추가 항목을 전달할 수 있습니다. method.
sb.append("hello");

StringBuffer는 문자열 연결 작업에서 String보다 더 효율적입니다.

String str = new String("welcome to " );
str += "here";
의 처리 단계는 실제로 StringBuffer를 생성하고, add()를 호출하고, 마지막으로
StringBuffer를 Sting()으로 전송하는 것입니다. 물론 효율성은 떨어지게 됩니다.

그리고 String 객체는 불변 객체이기 때문에 Sting이 실행될 때마다 새로운 객체가 다시 생성되어 새로운 값을 저장하게 됩니다.

이런 식으로, 원본 개체는 쓸모가 없으며 가비지 수집됩니다.

다음 코드를 살펴보세요.

26개의 영문자를 5000번 반복합니다.

1. = "abcdefghijklmnopqrstuvwxyz";

2. int times = 5000;
3. long lstart1 = System.currentTimeMillis();
4. String str = ""; 0; i < times; i++) {
6. str += tempstr;
7. }
8. System.currentTimeMillis()9.      - lstart1);
46초입니다.
다음 코드를 다시 살펴보겠습니다

1. String tempstr = "abcdefghijklmnopqrstuvwxyz";
2.int times = 5000;
3. 🎜 >4.       StringBuffer sb = new StringBuffer();
5.       for (int i = 0; i < times; i++) {

6.        = System.currentTimeMillis();

9. long time2 = (lend2 - lstart2);
10. System.out.println(time2);
결과는 때때로 16 여전히 0입니다
결론은 명백합니다. StringBuffer는 String보다 거의 수만 배 빠릅니다. 물론 이 데이터는 그다지 정확하지 않습니다. 왜냐하면 사이클 수가 100,000번이 되면 그 차이는 더욱 커지기 때문입니다. 나를 믿지 않는다면 시도해보십시오.



위에 따르면:

str += "here";
의 처리 단계는 실제로 StringBuffer를 생성하고 Append()를 호출하도록 하는 것입니다. , 마지막으로
StringBuffer toSting();

이므로 str += "here";는

StringBuffer sb = new StringBuffer(str);

과 동일할 수 있습니다. sb.append("here");

str = sb.toString();

따라서 "+"를 직접 사용하여 String을 연결하는 위 코드는 기본적으로 다음 코드와 동일할 수 있습니다.

1. 문자열 tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int times = 5000;
3. long lstart2 = System.currentTimeMillis();
4. 5. for (int i = 0; i 6. StringBuffer sb = new StringBuffer(str);
7. sb.append(tempstr);
str = sb.toString();
9. }
10. longlent2 = System.currentTimeMillis();
11.long time2 = (lend2 - lstart2);
시간은 약 46922, 즉 46초입니다.

요약: 프로그램에서 문자열을 자주 수정하고 연결해야 하는 경우 StringBuffer를 사용하면 성능이 더 높아집니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.