본문 바로가기
Java

equals() 와 ==

by Mikasang 2021. 4. 12.

안녕하세요. mika입니다. 이번 시간엔 equals()에 대해서 알아보고자 합니다!

 

 equals()라는 method는 아래와 같은 코드로 정의되어 있습니다.

자신의 메모리를 가리키는 this, 즉 인스턴스 자신을 가리키는 참조변수입니다.

 

equals()에서 처음 수행하는 연산은 if(this == anObject)입니다.

 

 if(this == anObject)를 통해서 this의 값과 내가 비교하고자 하는 객체의 메모리 주소가 같은지

"==" 연산자를 사용하여 비교를 수행합니다. 여기서 메모리의 주소값이 같으면 true값을 반환합니다.

 

하지만, 메모리의 주소값이 다르면 if(anObject instanceof String)을 수행하여 Object를 String으로 instanceof, 즉 형변환을 거쳐서 String 비교를 합니다.

 

(여기서 valu는 private final char value[] 입니다. this의 value에만 접근해서 length값을 return해주므로

BoardVO board = null;

MemberVO member = member.setName("홍길동");

board.equals(member)로 비교를 수행할 시 NullPointException의 오류가 뜨는 것을 흔히 보았을겁니다.

 NullPointException을 간단하게 피하려면 member.equals(board)와 같이 this의 값이 Null로 지정된 객체가 아닌 값이 있는 객체로 비교를 하면 됩니다.)

 

먼저 length로 길이를 비교한 뒤에, String의 값들을 char[] 넣어서 각각의 char를 비교하여서 그 값이 맞으면 true값을 반환하게 됩니다.

 

그렇다면, == 연산자(Operator)는 어떤 비교를 수행할까요? '==' 는 숫자의 값이나 비교하고자 하는 객체의 주소값을 비교하므로,

동일한 객체인 Student를

Student student1 = new Student1(2021, "홍길동");

Student student2 = new Student2(2021, "홍길동");

를 선언해서

if(student1 == student2) 로 비교하면 heapMemory상에서 두 인스턴스는 다른 주소에 저장되어있으므로 false를 return합니다.

if(student1.equals(student2)) 는 물리적 주소는 같지 않지만, 논리적 주소는 같으므로 true가 return 됩니다.

 


결론

equals는 인스턴스의 value의 값을 비교

== 는 인스턴스의 주소값을 비교

 

(만약, equals가 같을 때 return값으로 false를 받고 싶을땐 if(!(student1).equals(student2)) 로 비교하면 됩니다!)

'Java' 카테고리의 다른 글

프로그래밍에서의 Java란?  (0) 2021.04.11

댓글