자바를 사용하면서 두 대상의 값이 '같은지'를 비교할 때 문자열의 경우 A.equals(B)의 형태로 작성하곤 했다.
int형을 비교할 때는 == 연산자를 사용하고 문자열 비교에서도 == 연산자를 사용해도 값이 정상적으로 나오기도 하는데,
equals와 == 연산자의 차이
가 무엇이길래 문자열에서는 구분해 사용하는걸까?
equals와 == 연산자의 차이
간단히 결론부터 얘기하자면 == 연산자로는 리터럴 타입의 변수와 객체를 비교할 수 없다.
이유는 == 연산자는 대상의 주소를 비교
해 판단하기 때문이다.
데이터와 데이터(value)를 비교
하는 equals와 == 연산자는 비교 대상에 따라 다른 결과 값을 가지게 된다.
public static void main(String[] args) {
String txt1 = "ABC";
String txt2 = "ABC";
String txt3 = new String("ABC");
String txt4 = new String("ABC");
System.out.println(txt1==txt2); // true
System.out.println(txt1.equals(txt2)); // true
System.out.println(txt3==txt4); // false
System.out.println(txt3.equals(txt4)); // true
System.out.println(txt1==txt3); // false
System.out.println(txt1.equals(txt3)); // true
}
"ABC"라는 동일한 값을 문자형 변수 txt1, txt2와 객체 txt3, txt4에 대입하고 비교해보았다.
보기에는 같은 값을 대입했기 때문에 모두 같아 보이지만,
== 연산자와 equals로 결과를 출력했을 때 값이 달라지는 것을 확인할 수 있다.
변수
인 txt1과 txt2는 가지고 있는 데이터도, 주소값도 같기 때문에 == 연산자와 equals 모두 true를 출력한다.
반면 객체
로 선언된 txt3과 txt4는 txt1,txt2와 다른 주소값을 가지며
서로 다른 객체이므로 서로 다른 주소값을 가진다.
때문에 주소값을 비교하는 == 연산자로 비교했을 때는 false가 출력되지만,
가지고 있는 데이터(value)를 비교하는 equals 구문에서는 모두 "ABC"라는 데이터가 비교되기 때문에
true를 출력한다.
문자열 비교 시 equals 사용
예시에서 처럼 변수 간의 비교에는 == 연산자를 사용해도 원하는 대로 true 값을 얻을 수 있지만,
비교 목적이 문자 데이터가 같은지를 확인하기 위함이지 주소값을 비교하려는 것이 아니기 때문에
문자열을 비교할 때는 equals를 사용하는 것이 좋겠다. 😊
'JAVA' 카테고리의 다른 글
[JAVA] 반복문 - while문, do while문 (0) | 2023.03.09 |
---|---|
[JAVA] 반복문 - for문 (0) | 2023.03.09 |
[JAVA] 조건문(논리문) - 삼항 연산자, if문, switch case문 (0) | 2023.03.06 |
[JAVA] 객체 생성 : new 연산자 (0) | 2023.02.24 |
[JAVA] 연산자와 전후위연산 (0) | 2023.02.24 |