Jenny_yoon 2022. 11. 18. 22:09
728x90
반응형

1) equals()

- boolean 타입

- 객체자신(this)과 주어진 객체(obj)를 비교. 같으면 true, 다르면 false.

- Object 클래스의 equals()는 객체의 주소를 비교 (참조변수 값 비교)

- 인스턴스변수(iv)의 값을 비교하도록 equals()를 오버라이딩 해야한다.

 

ex.예시

	int value;
	
	Value(int value){
		this.value=value; }
	public boolean equals(Object obj) { //2. Object의 equals()를 오버라이딩 -> 주소가 아닌 value를 비교 
		if(!(obj instanceof Value)) return false; //4. instanceof로 형변환 가능한지 확인 
        Value v = (Value)obj; //3.obj를 value로 형변환obj에는 value가 없기때문)!참조변수 형변환 전엔 반드시 instanceof로 확인해야함.  
		//주소비교할땐(항상 거짓) return this==obj;  
        
		return this.value==v.value;  
	}
}

public class Ex9_1 {
	public static void main(String[] args) {

	Value v1 = new Value(10);
	Value v2 = new Value(10);
	if(v1.equals(v2)) //1. equals()를 오버라이딩 하지 않으면 false
		System.out.println("v1과 v2는 같다.");
	else 
		System.out.println("v1과 v2는 다르다.");
	}
}
더보기

실행결과 :

v1과 v2는 같다.

* equals()를 작동시킬 때, hashCoda() 메서드를 꼭 함께 실행시켜 주어야 한다.

* hashCode() 메서드가 항상 만족해야하는 2가지 조건

- 두 객체가 정확히 일치한다면, 그 둘의 hashCode도 정확히 같아야한다.

- hashCode는 객체의 값이 변하지 않는 이상 그 값이 절대 변화하면 안됌.

728x90
반응형