자바에서 String 타입의 문자열을 비교할 때 등가 비교 연산자(==)와 equals()는 차이가 있다. 자바에서 String타입의 문자열을 비교할 때 ==가 아닌 equals()라는 메서드를 이용한다.
1. 등가 비교 연산자(==)
등가 비교 연산자(==)는 기본 자료형에 대해서는 값 자체를 비교하지만 참조 자료형에 대해서는 주소 값을 비교한다. String은 참조 자료형으로 객체를 생성할 때마다 다른 주소 값을 갖게 된다. 즉, 내용이 같은 객체이더라도 다른 주소 값을 갖게 된다.
String str1 = "abc";
String str2 = "abc";
str1와 str1는 같은 내용을 갖고 있지만 다른 주소 값을 가진다.
2. 참조 자료형 String
기본적으로 String 변수를 선언할 때는 기본 자료형처럼 선언한다. 다음 예제를 보자.
public class Operator {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = "abc";
}
}
str1와 str2의 차이는 무엇일까? String은 참조자료형으로 클래스이다. 클래스의 객체를 생성할 때는 new String("abc")와 같이 하는 게 일반적이다. 그러나 자주 쓰이는 String은 특별히 new를 사용하지 않고 간단히 쓸 수 있게 허용한다. 그렇기 때문에 String을 기본 자료형을 선언할 때처럼 쓸 수 있는 것이다.
3. java.lang 패키지 메서드 equals()
java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다. 그렇기 때문에 java.lang패키지의 클래스들은 import문 없이 사용할 수 있다. java.lang클래스의 대표적인 클래스로는 Object, String 등이 있다.
equlas()은 Object클래스의 메서드 중 하나이다.
String클래스는 Object클래스의 equals메서드를 그대로 사용하는 것이 아니라 오버라이딩하여 문자열의 값을 비교하게 되어있다. 그렇기 때문에 주소 값이 아닌(서로 다른 객체인지 확인하는 것이 아니라) 문자열의 내용으로 비교를 하게 된다.
=> equlas()는 객체가 달라도 내용이 같으면 true를 반환한다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 알아두면 유용한 배열(Array) APIs (0) | 2021.08.13 |
---|---|
[JavaScript] 자바스크립트 메서드 map(), filter(), reduce() 사용 (0) | 2021.08.04 |
[Java] 3항 연산자 (0) | 2021.07.23 |
[Java] 반복문 while과 do~while의 차이 비교 (0) | 2021.07.22 |
[Java] 클래스 getter/setter (0) | 2021.07.22 |