자바 equals메서드 질문

자바 equals메서드 질문

작성일 2022.10.07댓글 1건
    게시물 수정 , 삭제는 로그인 필요



출력이
false
true
==============
false
false로 나옵니다

해결법은 알고있습니다.  Equals메서드를 오버라이딩하면 해결된다는건 알고있는데,

String객체로했을때와 Student객체로했을때의 결과가 왜 다른건가요?
Student객체로했을때도, 문자열이 같으니까 true로 나와야 일관성이 있다고생각하는데요...




profile_image 익명 작성일 -

안녕하세요.

문제를 이해하기전에 한가지 알아둘 부분이 있습니다.

자바에서 문자열은 객체로 다루어진다는 사실입니다.

String str1 = new String("test");

String str2 = new String("test");

이렇게 2개의 똑같은 문자열을 생성하더라도 독립된 2개의 문자열 객체가 만들어집니다.

== 연산자는 두 값을 비교하는 연산자인데요,

기본타입이야 값 자체를 저장하고 있으니 그냥 비교하면 되고, 참조변수는 변수 자체에 객체를 저장하는 것이

아니라 객체가 위치한 주소값을 가지고 있다고 이해하시면 됩니다.

참조변수 == 참조변수 의 결과는 실제로 같은 객체인지 여부가 결과가 나오겠지요.

위에서 str1 == str2 는 false가 나옵니다. 서로 독립된 같은 객체이니깐요.

이부분은 이해가 되실겁니다.

equals()메소드는 어떤 객체의 같음 여부를 판단하는 기준점을 만들어 주는 것이라고 생각하면 됩니다.

int n = 100; int n2 = 200;

n과 n2를 비교한다면 우리는 당연히 100과 200이라는 값의 크기를 비교합니다.

하지만 객체의 경우 그 기준이 없습니다.

class A{

int num1;

int num2;

}

이런 클래스가 있고, A a1 = new A(); A a2 = new A2();

a1과 a2를 비교한다고 할때 어떤걸 기준으로 비교해야 할까요?

지금이야 멤버변수가 있지만 없는 경우도 있지요. 경우에 따라서는 문자열만 가지고 있을수도 있구요.

우리는 num1과 num2를 비교하면 되겠지 하고 생각을 하겠지만, 자바는 기준이 없기 때문에 스스로 판단하는 것이

아니라 해당 클래스의 equals()메소드를 호출해서 그 반환값을 가지고 판단합니다.

클래스의 모든 조상 Object에 선언된 메소드이기 때문에 모든 클래스는 모두 가지고 있습니다.

그리고 Object의 equals()메소드는 주소값으로 비교하도록 되어있습니다.

여기에 답이 있습니다.

두번째 코드에서 Student 의 두 객체를 만들고, equals()를 하면 false가 나옵니다.

equals()를 오버라이딩 하지 않았다면, 서로 주소값을 비교하도록 되어있기 때문에 false가 나오는 것이지요.

그런데 문자열은 true가 나오지요??

이는 String 클래스에는 이미 equals()가 가지고 있는 문자열로 비교하도록 오버라이딩 되어 제공되기 때문입니다.

참고하시고, 궁금한 부분 있으시면 추가질문 주세요~

자바 equals() 메소드 질문

... System.out.println(sb1.equals(sb2)); } } 컴파일하면 false가 나오는데 원래 equals 메소드는 내용물을 비교하니까 위 객체들은 내용물이 같으니...

자바 equals메소드 질문

... for ( : ){ if(str.equals("Box") itr.remove(); } 이런식으로 코드가 대충 있다고 했을때 equals 메소드는 str인스턴스의 object에 있는 toSring 메소드 실행후 그 값을...

자바 equals메서드 질문

... Equals메서드를 오버라이딩하면 해결된다는건 알고있는데... 하겠지만, 자바는 기준이 없기 때문에 스스로 판단하는 것이 아니라 해당 클래스의 equals()메소드를...

자바 equals 메소드 질문..

제가 자바 책 보고 공부 중인데 이해가 안되는 부분이 먼저 예제 소스에요... equals 메소드가 두개의 객체가 같은지 비교하여 같으면 true를 같지...

자바 equals()메소드 질문

Object클래스에서 재정의 한 equals메소드를 .eqauls로 사용하지도 않았고 아예 사용하지도 않았는데 재정의 된 코드가 실행이 될 수있나요? 안녕하세요. 재정의를 하지...

자바 equals 메서드

... 질문하신 코드만 보고는 100% 오버라이딩이라고는 이야기 못하겠네요. 그러나... 지워주면 오류는 없어지고, equals()메소드는 오버로딩으로 동작합니다. 참고하세요.

자바 인터페이스 equals method와...

... equals 메소드에선 비교할땐 && 를 사용하는데 어떤 알고리즘적인... 조건문을 살펴보면, 질문주신 예시의 compareTo는 if (!(obj != null || obj...

자바 toString메서드 질문

... 아래 equals() 질문 해주신분 같은데요~ equals()와 비슷한 논리입니다. equals()메소드와 마찬가지로 toString()메소드도 모든 클래스의 조상인 Object에 정의된...