java

Java : Object(객체)

ThatHomr 2023. 3. 20. 15:45

import java.util.Objects;

class SimpleA {
    int data;
   
    // 추가된 필드
    int n1;
    int n2;
   
    SimpleA(int data) {
        this.data = data;
    }
   
    @Override
    public boolean equals(Object obj) {
        // Object 객체를 매개변수로 받기 때문에
        // 제대로 구분하여 비교할 수 있도록 해야한다.
       
        if(obj == null) return false;
        if(this == obj) return true;
        if(!(obj instanceof SimpleA)) return false;
       
        SimpleA other = (SimpleA) obj;
       
        // 비교하고자하는 필드를 비교
        if(this.data != other.data) return false;
        if(this.n1 != other.n1) return false;
        if(this.n2 != other.n2) return false;
       
        // 위의 조건이 모두 false 이면
        // 모든 필드가 동일하기 때문에 true 로 반환
        return true;
    }
   
    @Override
    public int hashCode() {
        // return super.hashCode();
       
        return Objects.hash(data, n1, n2);
    }
   
    @Override
    public String toString() {
        return "data = " + data;
    }
   
}
public class File02_Object {
    public static void main(String[] args) {
        SimpleA a1 = new SimpleA(10);
        SimpleA a2 = new SimpleA(10);
       
        // == 연산자 : 두 피 연산자의 값이 같은지 비교
        //  참조 변수들은 참조하는 객체의 메모리 주소를 가지며
        //  두 변수의 메모리 주소는 다르기 때문에 false
        if(a1 == a2) System.out.println("같은 객체입니다.");
        else System.out.println("다른 객체입니다.");
       
       
        // equals() 메서드 : 같은 객체인지 비교하는 메서드
        //  기본적으로 같은 인스턴스인지 비교
        //  같은 필드인지 비교하려면 오버라이딩을 통해
        //  직접 구현해야한다.
        if(a1.equals(a2)) System.out.println("같은 객체입니다.");
        else System.out.println("다른 객체입니다.");
       
        if(a1.equals("Hello")) System.out.println("같은 객체입니다.");
        else System.out.println("다른 객체입니다.");
       
        System.out.println(a1.hashCode());
        System.out.println(a2.hashCode());
        System.out.println(System.identityHashCode(a1));
        System.out.println(System.identityHashCode(a2));
        System.out.println("a1 : " + a1);
        // System.out.println("a1 : " + a1.toString());
       
    }
}