본문 바로가기

JAVA

[JAVA] StringBuffer로 equals 쓰기 오류

팰린드롬 문제를 풀다가 StringBuffer에서 reverse라는 메소드를 쓸 수 있어서 이 메소드로 풀어보았습니다.

public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        str.trim();
        StringBuffer s = new StringBuffer(str);
        StringBuffer r = new StringBuffer(str);
        r.reverse();
        int flag = 0;

        if(s.equals(r)) flag = 1;
        System.out.print(flag);
        sc.close();
    }

분명 출력으로 확인했을 땐 값이 같았는데 자꾸 flag가 0이 나왔습니다.
 

StringBuffer

StringBuffer에는 equals 메소드를 상속하지 않습니다.
equals를 사용해도 == 연산자를 사용한 것과 같은 결과가 나오게 됩니다.
따라서 toString으로 String화 해주고 equals를 사용하여 문제를 해결했습니다.
 

* equals는 내용을 비교한 것이고, == 연산자는 객체 자체를 비교한 것이다.

public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        str.trim();
        StringBuffer s = new StringBuffer(str);
        StringBuffer r = new StringBuffer(str);
        r.reverse();
        int flag = 0;

        String str1 = s.toString();
        String str2 = r.toString();
        
        if(str1.equals(str2)) flag = 1;
        System.out.print(flag);
        sc.close();
    }

 


참고 하시면 좋을 것 같아요!