본문 바로가기
Java

[Java] String 문자열 비교할 때 equals() 와 contentEquals() 차이점

by doogfoot 2023. 1. 3.

[Java] String 문자열 비교할 때 equals() 와 contentEquals() 차이점

 

Java에서 String 클래스의 equals()와 contentEquals() 메서드는 문자열을 비교할 때 사용합니다.

 

두 메소드가 비슷한 기능을 하는 것 같은데 정확히 어떤 차이점이 있는지 어느 상황에서 사용해야 하는지 알아보겠습니다.

 

우선 공통점은 둘 다 String 클래스의 public 메서드라는 것입니다.

 

그리고 해당 String 인스턴스의 문자열 값과 입력 매개변수의 문자열을 비교하여, 두 문자열이 정확히 같으면 true, 다르면 false를 반환하는 메서드입니다.

 

equals()

String 클래스도 기본적으로 Object 클래스를 상속받고 있으며 Object 클래스의 equals() 메서드를 재정의(Override)한 함수입니다.

 

입력 매개변수의 문자열과 같은지 비교할 뿐만 아니라 매개변수가 같은 String 인스턴스인지도 확인합니다.

 

그래서 String과 String 객체 사이의 비교만 가능합니다.

 

만약 String 과 StringBuffer객체를 equals() 메서드를 이용해 비교하려면 아래와 같은 방법으로 할 수 있습니다.

String str = "abc";
StringBuffer sb = new StringBuffer("abc");

str.equals(sb.toString());

다만 toString() 메서드를 사용하는 것은 아래 방법에 비해 비교적 오버헤드가 있기 때문에 Sting 과 StringBuffer 객체를 비교할때 equals() 메소드를 사용하는 것은 효율적이지 않습니다.

 

contentEquals()

Object 클래스에는 없는 String 클래스에서 새롭게 만든 메서드입니다.

 

입력 매개변수의 문자열과 같은지 비교하기는 하지만 꼭 String 인스턴스일 필요는 없습니다.

 

즉, String 객체와 CharSequence 인터페이스를 구현한 객체를 비교할 수 있습니다.

 

CharSequence를 구현한 객체는 예를 들면 String, StringBuffer, StringBuilder, CharBuffer 등이 있습니다.

 

그래서 String과 String 간에 문자열이 같은지 비교할 수도 있고, String과 StringBuilder 간에 비교도 할 수 있습니다.

 

위의 equals()와 다르게 CharSequence를 이용해 직접 비교를 하기 때문에 String과 StringBuffer 간에 비교를 할 때 효율적입니다.

 

Conclusion

결론은 두 메서드 둘 다 문자열이 같은지 비교할 수 있지만, String과 String 객체 간에 비교는 equals()메소드를 사용하고 그 외의 서로 다른 객체간에 비교는 contentEquals()를 사용하자입니다.

 

 

 

ChatGPT

ChatGPT에서 아래와 같은 질문을 했을 때의 답변을 참고했습니다. (아직 답변에 깊이가 있지는 않지만 틀린 내용 없이 적절한 수준의 설명과 예시까지 나와서 신기했습니다.)  

 

Q : what is difference between equals() and contentEquals() of String class?

A :  The equals() method of the String class compares the characters of two strings and returns true if they contain the same characters in the same order, otherwise it returns false.

The contentEquals() method of the String class compares the characters of two strings or a string and a StringBuffer object and returns true if they contain the same characters in the same order, otherwise it returns false.

Here is an example of how to use these methods:

String str1 = "Hello";
String str2 = "Hello";
String str3 = "Bye";

System.out.println(str1.equals(str2));  // prints true
System.out.println(str1.equals(str3));  // prints false

StringBuffer sb = new StringBuffer("Hello");

System.out.println(str1.contentEquals(sb));  // prints true

The main difference between equals() and contentEquals() is that equals() can only be used to compare two strings, while contentEquals() can be used to compare a string with a StringBuffer object as well.

'Java' 카테고리의 다른 글

[Java] 스트림(Stream)  (0) 2023.01.30
[Java] 현재 실행중인 클래스명, 메소드명 알아내기  (0) 2022.12.29

댓글