본문 바로가기

JavaScript

[Java] 문자열(String)비교 - 등가 비교 연산자(==)와 equals()의 차이

자바에서 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를 반환한다.