String클래스에서는 equals 메서드를 오버라이딩해서 문자열의 내용을 비교하도록 구현되어 있지만
StringBuffer클래스는 equals 메서드를 오버라이딩하지 않아서 StringBuffer클래스의 equals 메서드를 사용해도 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.
반면에 toString()은 오버라이딩되어 있어서 StringBuffer인스턴스에 toString()을 호출하면, 담고 있는 문자열을 String으로 반환한다.
그래서 StringBuffer인스턴스에 담긴 문자열을 비교하기 위해서는 StringBuffer인스턴스에 toString()을 호출해서 String인스턴스를 얻은 다음, 여기에 equals 메서드를 사용해서 비교해야 한다.
public class StringBufferEx1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println("sb == sb2 ? " + (sb==sb2));
System.out.println("sb.equals(sb2) ? " + sb.equals(sb2));
String s = sb.toString();
String s2 = sb.toString();
System.out.println("s.equals(s2) ? " + s.equals(s2));
}
}
'JAVA개념' 카테고리의 다른 글
쓰레드(Thread) (0) | 2021.12.06 |
---|---|
StringBuffer클래스의 생성자와 메서드 (0) | 2021.12.01 |
예외처리(exception handling) (0) | 2021.11.30 |
메서드를 사용하는 이유 (0) | 2021.11.28 |
JVM의 메모리 구조 (0) | 2021.11.28 |