9~1~3つのオブジェクトクラスとequals()


Objectクラス

  • すべての階級の最高の祖先.11の方法しかありません.
  • notify()、wait()などはスレッドに関連する方法である.
  • equals(Object obj)

  • オブジェクト自体を所与のオブジェクト(obj)と比較する.同じtrueで、違うのはfalseです.
  • オブジェクトクラスのequals()比較オブジェクトのアドレス(比較参照変数値)
  • public boolean equals(Object obj) {
        return (this==obj);		// 주소 비교.
    }
    # 예제
    class Value {
        int value;
        
        Value(int value){
        	this.value = value;
        }
    }
    class Ex9_1 {
        public static void main(String[] args){
        	Value v1 = new Value(10);
            Value v2 = new Value(10);
            
            System.out.println(v1.equals(v2));
        }
    }
    結果:2つの異なるオブジェクトには常に異なるアドレスがあります.


    ほとんどの場合、equals()メソッドは、非アドレス値(インスタンス変数iv値)を比較するために上書きされる.
    # 예제
    class Value {
        int value;
        
        Value(int value){
        	this.value = value;
        }
        
        // Object의 equals()를 오버라이딩해서 주소가 아닌 value를 비교
        public boolean equals(Object obj){
        	//참조변수의 형변환 전에는 반드시 instanceof로 확인해야 함
            if(!(obj instance of Value)) return false;
            
        	Value v = (Value)obj;	// obj를 value로 형변환(∵Value라는 리모콘에는 value버튼이 있지만, Object에는 없기 때문)
            
        	return this.value==v.value;
        }
    }