== 연산자는 비교하고자 하는 두개의 대상의 주소값을 비교하지만,
String클래스의 equals 메소드는 비교하고자 하는 두개의 대상의 값 자체를 비교한다.
== 예시 )
public class exCompare {
public static void main(String[] args) {
String s1 = "birthDay";
String s2 = new String("birthDay");
if(s1 == s2) {
System.out.println("==");
} else {
System.out.println("!=");
}
}
}
위 코드를 실행해보면 '!='이 출력된다.
참조 타입의 변수의 값은 힙 영역의 객체 주소이므로, 결국 주소 값을 비교하는 것이 되어
s1 과 s2는 다르다는 결과값을 뱉기 때문이다.
equals 예시 )
public class exCompare {
public static void main(String[] args) {
String s1 = "birthDay";
String s2 = new String("birthDay");
if(s1.equals(s2)) {
System.out.println("equals");
} else {
System.out.println("!equals");
}
}
}
equals의 경우에는 데이터값을 비교하기 때문에
어떻게 String을 생성하느냐에 따라 결과가 달라지지 않고 정확한 비교를 할 수 있다.
그러므로 해당 코드를 출력해보면 equals 가 출력된다.
compareTo()은 두개의 문자열을 비교한다.
동일한지의 여부만 확인할 수 있는 equals()와 다르게 값의 순서도 리턴해 준다.
그렇기 때문에 compareTo()를 이용하면 리스트를 오름차순으로 정렬하거나 내림차순으로 정렬할 수 있다.
리턴 값은 0, 음수, 양수의 int가 리턴되며 의미는 다음과 같다.
- 0 : 두개의 문자열이 동일
- 양수 : compareTo()를 호출하는 객체가 인자보다 순서가 앞설 때
- 음수 : 인자가 객체보다 순서가 앞설 때