JAVA/Java2021-2

Object 클래스 (모든 클래스의 최상위 클래스) toString, equals, hashcode, clone() 메서드

RoarinGom 2021. 10. 7. 17:40

모든 클래스는 Object 클래스를 상속 받는다. class 모든클래스 extends Object{} 라고 컴파일러가 자동으로 붙여준다.

java.lang 패키지 : 프로그래밍 시 import 하지 않아도 자동으로 import 된다. 

ex) String, Integer, System

종류

-toString()

-equals()

-hashCode()

 

ex1) equals()

package Basic_Grammar.chap4.ch02Object;

public class EqualsTest {
    public static void main(String[] args) {
        Student stu1=new Student(100,"Lee");
        Student stu2=new Student(100,"Lee");
        Student stu3=stu1;

        System.out.println(stu1==stu2);
        System.out.println(stu1.equals(stu2));
        System.out.println(stu1==stu3);
    }
}

첫번째 결과

 

ex2) 논리적으로 같은것 처리해주기. override(equals())

-> equals() 함수 overriding 후 실행한 결과

 

ex2) 논리적으로 같은것 처리해주기. override(hashCode())

hashCode() 오버라이딩 하기전(왼), 처리하고 난 후 (오른쪽) : hash코드값이 같아짐 결과

package Basic_Grammar.chap4.ch02Object;

public class EqualsTest {
    public static void main(String[] args) {
        Student stu1 = new Student(100, "Lee");
        Student stu2 = new Student(100, "Lee");
        Student stu3 = stu1;

        System.out.println(stu1 == stu2);
        System.out.println(stu1.equals(stu2));
        System.out.println(stu1 == stu3);

//        해시코드값 확인
        System.out.println(stu1.hashCode());
        System.out.println(stu2.hashCode());
;
    }

}

 

진짜 해시코드 찾으려면

System.identityHashCode()

 

 

clone()

: 클래스에 implements Cloneable 해주어야한다. (보안적인 이유에서 클론이 되면 접근제한자 무의미, 그래서 클론을 해도 되는 것은 cloneable 을 implements 해주어야한다. 

package Basic_Grammar.chap4.ch02Object;

public class EqualsTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        Student stu1 = new Student(100, "Lee");
        Student stu2 = new Student(100, "Lee");
        Student stu3 = stu1;

        System.out.println(stu1 == stu2);
        System.out.println(stu1.equals(stu2));
        System.out.println(stu1 == stu3);

//        해시코드값 확인
        System.out.println(stu1.hashCode());
        System.out.println(stu2.hashCode());
        
        Student copyStudent=(Student) stu1.clone();
        System.out.println(stu1);
        System.out.println(copyStudent);
        System.out.println(stu1==copyStudent);
        
    }

}

implements Cloneable 하지않음

implements Cloneable 한 후 ->