2013년 8월 21일 수요일

[4주차 3일] String 과 StringBuffer

String

: Immutable 객체

ex>
String ss = "12";
ss = ss + "34";
ss = ss + "56";

위의 코드를 실행하게 되면
처음에 "12"의 주소를 ss에 담고,
"12" + "34"를 수행한 결과인 새로운주소값을 ss에 담고,
"1234" + "56"을 수행한 결과인 새로운주소값을 ss에 담게 된다.

이 말은 String은 문자열을 더할때마다 결과를 위해 새로운 주소값을 할당 한다는 것이고, 이전에 쓰던 주소는 가비지가 된다는 것이다.



StringBuffer

: Mutable 객체

ex>
StringBuffer buf = new StringBuffer();
buf.append("12");
buf.append("34");
buf.append("56");

위의 코드를 실행하게 되면
StringBuffer에 append()를 하게되면 "12", "34", "56"의 각각의 주소를 StringBuffer에 저장해 놓는 개념이기 때문에 String을 더할때 처럼 중간 결과를 위한 가비지는 생성되지 않는다.



String과 StringBuffer의 사용에 주의할점

String은 값을 비교하기 위해서 equals()를 재정의 해서 사용하지만,
StringBufferequals()를 재정의 하지 않았기 때문에 기존 equals()의 원래 기능인 주소값을 비교한다.

ex>
String s1 = new String("Hello");
String s2 = new String("Hello");
if (s1.equals(s2)) {
System.out.println("s1.equals(s2)");
}

StringBuffer buf1 = new StringBuffer("Hello");
StringBuffer buf2 = new StringBuffer("Hello");
if (buf1 .equals(buf2 )) {
System.out.println("buf1 .equals(buf2)");
}

위의 결과를 살펴보면
s1.equals(s2)출력되지만
buf1 .equals(buf2)출력되지 않는다.



* java 1.5(?) 1.6(?) 이후 부터는 String의 개선을 통해서 String과 StringBuffer의 큰 차이가 없다고 하지만, 그래도 많은 String을 한꺼번에 처리 할때는 StringBuffer를 쓰도록 하자.










댓글 없음:

댓글 쓰기