우선 차이점을 살펴보겠습니다.
(추천 학습: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!