>Java >Java시작하기 >equals() 함수와 '=='의 기능은 무엇입니까?

equals() 함수와 '=='의 기능은 무엇입니까?

王林
王林앞으로
2020-07-10 16:59:393483검색

equals() 함수와 '=='의 기능은 무엇입니까?

우선 차이점을 살펴보겠습니다.

(추천 학습: java 입문 프로그램)

  • equals() 메소드는 두 객체의 내용이 같은지 비교하는 데 사용됩니다. 모든 클래스 이들은 모두 java.lang.Object 클래스에서 상속되므로 모든 객체에 적용 가능합니다. 이 메서드가 재정의되지 않으면 Object 클래스의 메서드는 계속 호출되지만 Object의 equals 메서드는 ==를 반환합니다. 판단;

  • "==" 변수(스택) 메모리에 저장된 객체의(힙) 메모리 주소를 비교하여 두 객체의 주소가 동일한지, 즉 두 객체가 동일한지 여부를 확인하는 데 사용됩니다. 동일한 개체를 참조합니다.

equals() 함수

equals() 함수는 두 개체가 같은지 여부를 확인하는 데 사용됩니다.

equals()는 JDK의 Object.java에 정의되어 있습니다. 주소가 같은지(즉, 동일한 객체인지) 판단하여 두 객체가 동일한지 여부를 구별합니다. 소스 코드는 다음과 같습니다.

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

equals() 메소드가 Object.java에 정의되어 있으므로 이는 모든 Java 클래스가 equals() 메소드를 구현하고 모든 클래스가 equals()를 사용하여 두 객체가 일치하는지 비교할 수 있음을 의미합니다. 동일한. .

그러나 기본 "equals()" 메서드를 사용하는 것은 "==" 메서드와 동일하다고 이미 말했습니다. 따라서 우리는 일반적으로 equals() 메서드를 재정의합니다. 두 객체의 내용이 동일하면 equals() 메서드는 true를 반환하고, 그렇지 않으면 fasle을 반환합니다.

다음은 "클래스가 equals() 메서드를 포함하는지 여부"에 따라 2가지 범주로 나뉩니다.

  • 클래스가 equals() 메소드를 다루지 않는 경우, equals()를 통해 두 객체를 비교할 때 실제로 두 객체가 동일한 객체인지 비교합니다. 이때 "=="를 통해 두 객체를 비교하는 것과 같습니다.

  • 클래스의 equals() 메소드를 재정의하여 equals()가 다른 메소드를 통해 두 객체가 동일한지 비교할 수 있도록 할 수 있습니다. 일반적인 접근 방식은 두 객체의 내용이 동일하면 equals() 메서드가 true를 반환하고, 그렇지 않으면 fasle을 반환하는 것입니다.

다음은 위 두 가지 상황을 예시한 것입니다.

1. equals() 메서드가 적용되지 않은 경우

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
    }
}

실행 결과:

false

결과 분석:

user1.equals를 전달합니다. (user2) "user1과 user2가 같은지 비교"하기 위해 실제로는 Object.java의 equals() 메소드, 즉 (user1==user2)가 호출됩니다.

"p1과 p2가 동일한 객체인지"를 비교합니다. user1과 user2의 정의를 보면 내용은 동일하지만 두 개의 다른 개체이므로 반환 결과가 false임을 알 수 있습니다.

(추천 영상 튜토리얼: java 영상 튜토리얼)

2. Equals() 메소드 오버라이드

위 EqualsTest를 수정하고 Equals() 메소드 오버라이드:

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
 
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
}

실행 결과:

true

결과 분석: 우리 User의 equals() 함수는 EqualsTest.java에서 다시 작성되었습니다. 두 User 객체의 이름과 나이가 같으면 true가 반환됩니다. 따라서 실행 결과는 true를 반환합니다.

==

"=="의 기능: 이 기능은 두 개체의 주소가 동일한지 확인하는 것입니다. 이는 참조 개체가 가리키는 힙에 있는 동일한 개체인지 확인하는 것입니다. 우리는 모든 새 개체가 힙에 있다는 것을 알고 있습니다. 객체에 대한 참조는 스택, 특히 스택 프레임에 저장됩니다. 다음 코드 부분을 살펴보겠습니다.

public static void main(String[] args) {
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.println("user1.equals(user2):" + user1.equals(user2));
        System.out.println("user1==user2:" + (user1==user2));
}

출력 결과:

user1.equals(user2):true
user1==user2:false

는 힙의 서로 다른 두 영역을 가리키므로 " ==를 사용하면 false가 반환됩니다. 비교할 때.

위 내용은 equals() 함수와 '=='의 기능은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제