출처 : 유튜브 [ 자바의 정석-기초편 ] 을 보고 정리 작성한 자료입니다.
👉 클릭! 유튜브 링크
- 객체 자신과 객체 obj가 같은 객체인지 알려준다.
(같으면 true, 다르면 false) => boolean 타입- 객체의 주소(참조변수 값) 비교
내부 살펴보기
public boolean equals(Object obj){
return (this == obj);
}
유튜브 화면 캡쳐
v1
객체와 v2
객체는 같은 10
이라는 값을 갖고 있지만, 주소가 다름. 즉 컴퓨터 입장에선 다른 객체다. 때문에 equals()
로 비교시 false
가 나온다. 안에 있는 값의 비교와 상관없이 객체는 모두 고유의 주소 값
을 가진다. 그렇다면, 늘 false 가 나온다면! 이 메서드는 왜 있는걸까..? equals()
를 활용해서 객체의 값!
객체에 실제 들어가 있는 값을 비교하고 싶으면 어떻게 해야 할까?
정답은?! > 오버라이딩
1) 비교하려는 객체에 equals()
를 오버라이딩 한다.
equals()
는 object
메서드이기에 가능!
class Value {
int value;
public Value(int value) {
this.value = value;
}
@Override //Object의 equals() 오버라이딩 해서 주소가 아닌 value를 비교
public boolean equals(Object obj) {
// 참조변수의 형변환 전에는 반드시 instanceof로 확인해야함.
// 다른 비교할 수 없는 객체들이 들어오는 것을 사전에 방지.
// Object는 다 들어올 수 있으니까.
if(!(obj instanceof Value)) return false;
// 형변환, 왜냐하면 Object 안에서 value를 꺼낼 수 없으니까!
Value v = (Value)obj;
return this.value == v.value;
}
}
2) 메인에서 비교하기
public class ObjectEx {
public static void main(String[] args) {
Value v1 = new Value(10);
Value v2 = new Value(10);
if (v1.equals(v2))
System.out.println("같다.");
else
System.out.println("다르다.");
}
}
3) 결과 확인 -> 값 비교 성공!
🐥 TMI
hashcode()도 같이 오버라이딩 해서 주소 값도 맞춰줘야 한다는데, 아직 강의 안들어서 모르겠다.. ㅎ,ㅎ 이 부분 복습하고 봐야지.. 이렇게 짧은데 하나 하나 정리하고 따라 쳐서 복붙 하는데 시간이 엄청 걸린다. ㅠ_ㅠ 물론 이해는 훨씬 잘 되니까 맞는 공부 방법 같은데, 좀 더 해봐야겠다!!
그래도 좋은 강의를 무료로 보며 공부할 수 있다는 것에 무한한 감사를 느낀다.
🥄🥄🥄 잘 받아 먹자ㅏㅏ!!