equals()
Object의 equals() 메소드는 객체의 번지를 비교하고 boolean 값을 리턴한다.
`obj instanceof Class`: obj가 Class에 속하거나 Class를 상속받는 클래스에 속하면 true가 반환 됨
MemberExample.java
package ch12.sec03.exam01;
public class MemberExample {
public static void main(String[] args) {
Member mbr1 = new Member("홍길동");
Member mbr2 = new Member("홍길동");
Member mbr3 = new Member("고길동");
User usr1 = new User("홍길동");
System.out.printf("1 == 2 => %s\n", mbr1.equals(mbr2));
System.out.printf("1 == 2 => %s\n", mbr1 == mbr2);
System.out.printf("1 == 3 => %s\n", mbr1.equals(mbr3));
System.out.printf("mbr1 == usr1 => %s\n", mbr1.equals(usr1));
}
}
Member.java
package ch12.sec03.exam01;
public class Member {
public String id;
public Member(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Member target) {
if (this.id.equals(target.id)) {
return true;
} else {
return false;
}
} else {
return false;
}
}
}
실행 순서
- MemberExample.java에서 `Member mbr1 = new Member("홍길동");` 을 통해서 Member 클래스의 생성자인 `Member(String id)` 가 호출 됨 - 코드를 볼 땐 항상 main에서 보는 습관을 들여야 함
- Member.java에서 홍길동 값이 `id`로 전달 되고, 이 값이 `mbr1` 객체의 `id` 필드에 저장 됨
- Member.java의 `mbr1.equals(mbr2)` 가 호출되면서 `mbr1` 의 `equals()` 메서드가 실행 됨
- instanceof는 `object instanceof type `즉. object가 type이거나, type을 상속받는 클래스라면 true를 리턴, 아니라면 false를 리턴함
- 3번의 `mbr2` 가 `equlas()` 메서드의 `obj` 매개변수로 전달 됨
- Member.java에서 `obj instance Member target` 이 실행되면서 `obj` 가 `Member` 타입이 맞으므로 `target` 변수에 `obj`가 저장 됨
- `if (this.id.equals(target.id))` 를 통해 target.id, 즉 mbr1의 id와 mbr2의 id가 일치하는지 검증함
출처
1. 이것이 자바다
'TIL > Java' 카테고리의 다른 글
[Java] Forward, Redirect 의 차이 (0) | 2024.09.28 |
---|---|
[TIL/Java] 다형성, 필드 다형성, 추상 클래스 (abstract) (0) | 2024.08.19 |
[TIL/Java] 학생 수 입력받고 점수 등록하기 (if-else을 switch문으로 리팩토링) (0) | 2024.08.13 |
[TIL/Java] 배열 항목에서 최대값 출력하기 (for문 이용) (0) | 2024.08.12 |
[TIL/Java] 컴파일러란? (0) | 2024.08.07 |