자바에서 문자열을 비교할 때 주로 사용하는 "=="와 "equals"는 비교할 때 사용된다는 점에서 공통점이 있지만 비교 방식에는 차이가 있다.
==는 객체의 주소를 비교하는 연산자이며 equals는 객체의 값을 비교하는 함수이다.
String aDrink = new String("Americano");
String bDrink = new String("Americano");
String cDrink = "Americano";
a의 아메리카노, b의 아메리카노, c의 아메리카노가 있다고 할 때 "equals" 함수는 각각의 "아메리카노"라는 값을 비교하는 것이다. 따라서 아래 코드는 true를 반환한다. 만약 b의 "레몬에이드"였다면 false를 반환했을 것이다.
if(aDrink.equals(bDrink)){
System.out.println("-> true");
} else {
System.out.println("-> false");
}
반면 "==" 연산자는 a와 b, a와 c 즉, "어디"의 아메리카노인지 아메리카노의 주소를 비교한다. 때문에 아래 결과는 false이다.
if(aDrink == bDrink){
System.out.println("-> true");
} else {
System.out.println("-> false");
}
아래는 전체 코드의 흐름이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | package biz.test; public class Cafe2{ public static void main(String args[]) { String aDrink = new String("Americano"); String bDrink = new String("Americano"); String cDrink = "Americano"; System.out.println(aDrink); System.out.println(bDrink); System.out.println(cDrink); System.out.println("aDrink == bDrink"); if(aDrink == bDrink){ System.out.println("-> true"); } else { System.out.println("-> false"); } System.out.println("aDrink.equals(bDrink)"); if(aDrink.equals(bDrink)){ System.out.println("-> true"); } else { System.out.println("-> false"); } System.out.println("aDrink == cDrink"); if(aDrink == cDrink){ System.out.println("-> true"); } else { System.out.println("-> false"); } System.out.println("aDrink.equals(cDrink)"); if(aDrink.equals(cDrink)){ System.out.println("-> true"); } else { System.out.println("-> false"); } } } | cs |
<결과>