본문 바로가기
(JAVA)자바/(JAVA)자바 문법

(JAVA)자바 equals() 의 오버라이딩 쓰는 이유/참조변수에 저장된 값 비교

by 공부가싫다가도좋아 2021. 1. 29.
반응형

equals() 오버라이딩


강의를 듣고 처음에 이게 뭔소리지??!!

하다가 실습하면서 깨달음을 얻고 여기다가 적어봅니다.

package Chap9;

class Person {
	long id;
	
//	public boolean equals(Object obj) {
//		if(obj instanceof Person)
//			return id==((Person)obj).id;
//		else
//			return false;
//	}
	Person(long id){
		this.id=id;
	}
}

public class Ex02 {

	public static void main(String[] args) {
		Person p1=new Person(8011081111222L);
		Person p2=new Person(8011081111222L);
		
		if(p1.equals(p2)) {
			System.out.println("같은사람");
		}
		else {
			System.out.println("다른사람");
		}
	}

}



 

equals()오버라이딩 한 부분을 주석처리 하면 결과는

# 다른사람

이라고 나옵니다. 하지만 equals()오버라이딩을 해주면 

package Chap9;

class Person {
	long id;
	
	public boolean equals(Object obj) {
		if(obj instanceof Person)
			return id==((Person)obj).id;
		else
			return false;
	}
	Person(long id){
		this.id=id;
	}
}

public class Ex02 {

	public static void main(String[] args) {
		Person p1=new Person(8011081111222L);
		Person p2=new Person(8011081111222L);
		
		if(p1.equals(p2)) {
			System.out.println("같은사람");
		}
		else {
			System.out.println("다른사람");
		}
	}

}



#결과: 같은사람

결과가 다른 이유는 equals()오버라이딩을 안해주면 참조변수에 저장된 값(주소값)으로 판단을 합니다.

(Object equals는 원래 주소값을 비교함.)

같은 value라도 p1과 p2에 저장되어, 주소값은 다르기 때문에 다르다고 나옵니다.

그러므로, 참조변수가 가지고 있는 value를 비교하기 위해서는 equals()의 오버라이딩을 써야됩니다.

오버라이딩을 하므로 괄호 안에있는 value를 비교하게 합니다.

 

참조변수를 통한 비교 말고 직접적으로 비교할때는 바로 equals()를 써줘도 됩니다.

package Chap9;

public class Ex03 {

	public static void main(String[] args) {
		String str1="8011081111222L";
		String str2="8011081111222L";
		if(str1.equals(str2)) {
			System.out.println("같음");
		}
		else {
			System.out.println("다름");
		}

	}

}

#결과: 같음

 

 

반응형

댓글