Java에서 "=="와 equals()의 차이점
관계 연산자 "=="에 대해 "Java 프로그래밍 사고"에서는 다음과 같이 설명합니다. "관계 연산자는 부울을 다음과 같이 생성합니다. 결과적으로 피연산자 값 간의 관계를 계산합니다." 여기서 피연산자의 "값"에 주목할 가치가 있습니다. 8가지 기본 데이터 유형(boolean, byte, char, short, int, float, double, long)의 경우 해당 변수는 "값"을 직접 저장합니다. 따라서 기본 데이터 유형의 변수를 비교하기 위해 "=="를 사용할 때 실제 비교는 변수에 저장된 값입니다. 예:
public static void main(String[] args) { int a = 5, b = 5; System.out.println(a == b); }
분명히 프로그램은 true를 출력합니다. 하지만 다음 코드는 어떻습니까?
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c == d); }
프로그램을 실행한 결과 결과는 false였습니다. 이는 정수가 Java의 기본 데이터 유형이 아니기 때문입니다. 해당 변수 c 및 d는 Java에서 객체를 가리키는 참조라고 불리며, 이들이 저장하는 "값"은 값 "5" 자체가 아닙니다. 따라서 c와 d는 실제로 값이 모두 "5"인 두 Integer 개체의 주소를 저장합니다. 이 두 개체는 동일한 메모리 공간에 있지 않으며 "==" 비교 결과는 당연히 거짓입니다.
그렇다면 equals() 메소드는 무엇을 비교하는가? equals()는 기본 클래스 Object에 정의된 메서드입니다. Object 클래스에서 equals() 메서드는 다음과 같이 정의됩니다.
public boolean equals(Object obj) { return (this == obj); }
이는 "=="와 같습니다. 사실, equals() 메소드의 중요성은 다시 작성하는데 있습니다. 그렇지 않으면 equals()에 대한 호출은 의미가 없습니다. 예를 들어 Object에서 상속된 Integer 클래스는 다음과 같이 equals() 메서드를 재정의합니다.
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
이 메서드의 의미는 값 값을 비교하는 것입니다. 그런 다음 두 Integer 개체를 비교하면 동일한 값으로 비교를 위해 equals()를 호출합니다.
public static void main(String[] args) { Integer c = new Integer(5), d = new Integer(5); System.out.println(c.equals(d)); }
결과는 true입니다.
읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!
Java에서 "=="와 equals()의 차이점에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!