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()으로 전송하는 것입니다. 물론 효율성은 떨어지게 됩니다.
이런 식으로, 원본 개체는 쓸모가 없으며 가비지 수집됩니다.
26개의 영문자를 5000번 반복합니다.
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++) {
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를 사용하면 성능이 더 높아집니다.