[Java기초]equals()메소드

조은지·2021년 3월 18일
0

Java기초

목록 보기
1/2

Java 기본 클래스 - Object 클래스

Object 클래스에서의 equals() 메소드는 ==연산자와 동일한 역할을 한다.
같은 메모리 상에 있는지를 확인하고 동일한 객체라면 true를 아니라면 false를 반환한다.

java.lang.Object.equals(Object obj)

public boolean equals(Object anObject) {
        return this==obj;

그런데 String 객체를 비교해보면 다른 결과가 나타난다.

test code

public static void main(String[] args){
        //String 클래스
        String str = new String("test");
        System.out.println(str);
        String str2 = new String("test");
        //==와 equals의 비교
        System.out.println(str==str2);
        System.out.println(str.equals(str2));
    }

str와 str2는 값은 "test"로 동일하지만 다른 메모리에 있는 다른 객체이다.
그런데 equals메소드를 사용하면 true라는 결과가 반환이 된다.

java.lang.String.equals(Object obj)

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

String 클래스의 equals메소드를 보면 먼저 동일한 객체인지를 확인하고, 만약 다르다면 다른 메모리 상에 있더라도 그 값이 동일한지를 확인하고 있다.

package object;

class Student{
    int studentID;
    String studentName;

    Student(int studentID, String studentName){
        this.studentID = studentID;
        this.studentName = studentName;
    }

	@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        else if (obj instanceof Student) {
            Student aStudent = (Student) obj;
            if (this.studentID == aStudent.studentID) {
                return true;
            }
        }
        return false;
    }
}
public class EqualsTest {
    public static void main(String[] args){
        int count=0;
        Student 김진수 = new Student(1,"김진수");
        Student 김진수2 = new Student(1, "김진수");
        System.out.println(김진수.equals(김진수2));
        System.out.println(김진수 == 김진수2);

    }
}

equals 메소드 오버라이딩을 이용
학생1, 2가 있을 때 다른 객체이더라도 학번이 같으면 같은 학생이라고 반환하도록 재정의를 해주었다.

파라미터가 Object타입이기 때문에 Student aStudent에 형변환을 하여 비교를 했다.

+equals()를 재정의하면 hashCode()도 재정의를 해줘야한다

신기하굼헌

0개의 댓글

Powered by GraphCDN, the GraphQL CDN