[자바/안드로이드] 자바 문자열 비교하기(equals ==)

Posted by 앱해피
2015. 7. 3. 06:56 자바(JAVA)
자바(JAVA)에서 equals과 ==의 차이점

 

 

 

 

자바에서 equals와 ==의 차이점을 알아보자

 

위 두 연산자는 모두 양 쪽에 있는 데이터를 비교한 결과를 Boolean Type(True or False)로 반환한다는

 

공통점을 가진다. 하지만 그 기능에는 차이가 있다.

 

1) 형태의 차이

 

equals()는 메소드다. 객체끼리 내용을 비교할 수 있는 기능을 제공한다.

 

==는 비교를 위한 연산자에 해당한다.

 

2) 주소값 비교와 내용 비교

 

equals() 메소드는 비교하고자 하는 대상의 내용 자체를 비교하지만,

 

== 연산자는 비교하고자 하는 대상의 주소값을 비교한다.

 

 

예를 들어, String 클래스를 이용해 문자열 생성해서 비교해보기

 

String a = "aaa";

String b = a;

String c = new String("aaa");

 

a, b, c 모두 "aaa"라는 문자열을 가지고 있지만 주소값은 모두 동일하지 않은 변수를 가지게 된다.

 

세 문자열이 주소값을 할당받는 내용을 그림으로 살펴보자.

 

 

자바, 안드로이드, 문자, 문자열, 비교, equals, ==

 

a, b, c라는 String 타입의 객체는 모두 "aaa"라는 문자열 내용을 가지고 있다.

 

a, b는 500이라는 임의의 주소값을 할당 받은 상태고, c는 600이라는 임의의 주소값을 할당받았다.

 

"aaa"라는 내용은 같지만 c가 다른 주소값을 할당받은 이유는 "aaa"라는 문자열을 대입한 것이 아닌

 

new String("aaa")를 통해 새로운 문자열을 선언했기 때문이다.

 

이제 이 상황에서 equals, ==를 이용해서 결과가 어떻게 차이가 나는지 확인하자.

 

 

자바, 안드로이드, 문자, 문자열, 비교, equals, ==

 

 

1) a.equals(b)

 

a와 b가 가지고 있는 내용("aaa")을 비교하였으므로 true

 

2) a == b

 

a와 b가 가지고 있는 주소값(임의의 값 500)을 비교하였으므로 true

 

3) a == c

 

a와 c가 가지고 있는 주소값(임의의 값 500과 600)을 비교하였으므로 false

 

4) a.equals(c)

 

a와 c가 가지고 있는 내용을 비교하였으므로 true

 

감사합니다 ^_^