본문 바로가기
PROGRAM/JAVA / JSP

equals와 ==의 차이점

by ojava 2011. 2. 28.
반응형
equals와 ==의 차이점


 

equals

== 은 어떤 차이점이 있을까요.

기본적으로 이 둘은 모두 양 쪽에 있는 내용을 비교한 값을 boolean type으로 반환한다는 공통점을 가집니다.

하지만 차이점이 분명 존재합니다.

 

 

1) 형태의 차이

 

가장 단순한 차이점은 형태의 차이입니다.

 

equals ()  메소드 입니다. 객체끼리 내용을 비교할 수 있도록 합니다.

== 은 비교를 위한 연산자 입니다.

 

 

반응형

 

 

 

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

 

차이점이라 말할만한 내용으로는, 비교할 수 있는 대상에 대한 부분입니다.

 

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

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

 

 

주소값이라는 것은 확실하게 집주소나 이메일주소처럼 확정적으로 정해져서 보여지는 것은 아니지만

대상을 구별할 수 있게하는 값이라고 알아두시면 됩니다.

 

이는 Call By Reference, Call By Value에 대한 공부를 하시면 이해할 수 있는 부분입니다.

 

 

CBV(Call By Value. 이하 CBV) 는 기본적으로 대상에 주소값을 가지지 않는 것으로 값을 할당받는 형태로 사용됩니다. 예를 들어 int, float, double, byte primitive type에 해당됩니다.

 

CBR(Call By Reference. 이하 CBR) 는 대상을 선언했을 때, 주소값이 부여됩니다.

그래서 어떠한 객체를 불러왔을 때는 그 주소값을 불러온다고 봅니다.

Class, Object(객체)가 CBR에 해당됩니다.

 

 

 

예를 들어, String 클래스를 이용해 문자열을 생성해보겠습니다.

 

String a = "aaa";

String b = a;

String c = new String ("aaa");

 

 

a, b, c 모두 "aaa" 라는 내용을 가지고 있지만 주소값에 대해서는 다른 값을 가지는 변수가 존재합니다. 세 문자열이 주소값을 할당받는 내용을 그림으로 표현해보았습니다.

 

 

 

 

 

 

회색 테두리가 문자열 변수 a, b, c를 표현한 내용입니다.

그림에서는 a, b, c 모두 같은 aaa라는 문자열 내용을 가지고 있지만, a, b는 500이라는 임의의 주소값을 할당 받았으며, c는 600이라는 임의의 주소값을 할당받았습니다.

 

 

내용은 같지만 c가 다른 주소값을 할당받은 이유는 "aaa" 라는 문자열을 대입한 것이 아니라 new String ("aaa") 를 통해 새로운 문자열을 선언하였기 때문입니다. 

 

 

위의 내용을 다 이해하셨다면 equals, == 을 이용한 아래의 내용이 어떻게 출력되는지 봅시다.

 

System.out.println( a.equals(b));

System.out.println( a==b);

System.out.println( a==c);

System.out.println( a.equals(c));




정답은

첫번째는 a와 b가 가지고 있는 내용을 비교하였으므로 true
두번째는 a와 b가 가지고 있는 주소값을 비교하고 있으므로 true
세번째는 a와 c가 가지고 있는 주소값을 비교하고 있으므로 false
네번째는 a와 c가 가지고 있는 내용을 비교하였으므로 true

물론 b.equals(c) 는 true, b==c 의 값은 false 라는 사실은 다 아시죠?


 

 쓴다 쓴다하고 미루다가 이제야 썼네용. 2월의 마지막 포스팅입니다.

 3월에는 더 새롭고 유용하고 도움이 되는 포스팅을 많이 하고싶네요~~~

 

 

 

+) 2018.12

 

간만에 들어와서 포스팅들을 살펴보다가 자주 들어오는 글로 확인되어서

문단 간격이나 폰트 등을 일부 수정했습니다.

아주 예전에 정리한 글로 아직도 유입량이 많은 걸 보면서 모든 포스팅마다 열의를 가지고 써야겠다는 생각이 드네요 ^^;

반응형

'PROGRAM > JAVA / JSP' 카테고리의 다른 글

java.net.SocketException : Broken pipe  (0) 2015.09.16
final과 static의 다양한 사용 방법  (2) 2012.04.13
EL에 대해서 알아봅시당!  (0) 2011.03.21
eclipse에서 Javadoc을 만들어봅시당.  (1) 2011.02.18
CKEditor 사용법  (2) 2011.01.25