티스토리 뷰

Java

자바 equals

Xion 2018. 8. 29. 02:41


ex)


public static void main(String[] args) {
        Student s1 = new Student("egoing");
        Student s2 = new Student("egoing");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));


이렇게 비교하면 둘다 false가나온다 객체와 객체를 비교해서 그러므로

문자열을 비교해야함.


class Student{
    String name;
    Student(String name){
        this.name = name;
    }
    public boolean equals(Object obj) {
Student s = obj;         //불가능 return true ;
    
    }
}
class ObjectDemo {
    public static void main(String[] args) {
        Student s1 = new Student("egoing");
        Student s2 = new Student("egoing");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

저렇게 불가능 부분에서 왜 불가능이 일어나면 다형성과 연관이 깊은데

예를들어 Object데이터타입인 obj 즉 Object obj=s2;   s2를 오브젝트 데이터타입인 obj로 변환하는건 가능하다

자식이 부모가될때는 자동으로 형변환이 된다.

이유는 오브젝트(부모)의 자식이기때문에 자식이 부모행세하는것은 가능한데


Student s= obj; 이런식으로 자식의 데이터타입으로 할당되는것은 불가능하다 부모입장에서는 자식이 어떤것을을 가지고 있는지 모르기때문이다

  

 따라서 가능하게 하려면 Student s=(student)obj;로한다 즉 강제로 명시적으로 데이터 형식을 변환하는것이다.


Object obj처럼 어떠한 매개변수를 받을때 그 매개변수의 데이터 타입으로 object를 일반적으로 쓰기때문에 잘 알아둬야한다.



또한

그 이유가 분명하지 않다면 비교 연산자 == 은 원시 데이터형을 비교할 때만 사용하자.

원시 데이터 형(Primitive Data Type)이란 자바에서 기본적으로 제공하는 데이터 타입으로 byte, short, int, long, float, double, boolean, char가 있다. 이러한 데이터 타입들은 new 연산자를 이용해서 생성하지 않아도 사용될 수 있다는 특징이 있다.

String이나 객체를 비교할땐 equals를 쓰는게 좋음!

'Java' 카테고리의 다른 글

java clone  (0) 2018.09.04
java finalize , garbage collection  (0) 2018.08.29
Object클래스  (0) 2018.08.29
checked와 unchecked  (0) 2018.08.28
Exception을 직접 발생시키는 방법  (0) 2018.08.28