자바에서 보통 숫자형끼리 크기를 비교할때처럼 문자열도 ==을 이용하여 비교할 수 있을까? 엄밀히 말하면 정확하지 않은 방법이다.
String a = "abc";
String b = "abc";
String c = new String ("abc");
System.out.println(a==b);
//true
System.out.println(a==c);
//false
a 와 b는 같은 객체를 가리키고 있지만 c는 new 키워드를 사용하여 새로운 객체를 만들고 있다.
a,b,c는 객체안의 내용은 모두 "abc"로 같지만, c는 a,b와 다른 새로운 객체를 가리키고 있게 되는 것이다.
equals는 Object클래스에 정의되어 있는 메소드이며, String클래스에서 이를 오버라이딩하여 사용한다. 매개변수로 전달된 문자열을 비교하며 boolean값을 반환한다.
String a = "abc";
String b = "abc";
String c = new String("abc");
System.out.println(a.equals(b));
//true
System.out.println(a.equals(c));
//true
equals()를 사용하면 객체안의 문자열 내용을 비교할 수 있다.
compareTo는 두 문자열이 단순히 같은지 아닌지를 알려줄 뿐만 아니라 어떤것이 사전적인 순서로 더 앞,뒤에 존재하는지를 알려준다.
반환값이 음수이면 compareTo를 호출하는 문자열이 더 앞에 있다는 뜻이고
반환값이 0이면 두 문자열이 같다는 뜻이고
반환값이 양수이면 매개변수로 입력되는 문자열이 더 앞에 있다는 뜻이다.
String a = "abc";
String b = "abc";
String c = "def";
System.out.println(a.compareTo(b));
//0
System.out.println(a.compareTo(c));
//음수
System.out.println(c.compareTo(a));
//양수