본문 바로가기
Java (국비)/Java 메모

연산자 ==, equals() 메서드 메모

by Hwanii_ 2023. 6. 2.
728x90

 Test 라는 클래스와, 멤버변수로 name과 num을 가지고 있는 상황.

 

참조변수 test1과 test2는 주소가 다르기 때문에 둘을 비교하면 무조건 다르다고 뜬다.

 

 

그래서 만약에, 

위와 같이 포켓몬을 비교하려고 하는데, 예를들어 포켓몬 둘이 피카츄로 같은 상황.

 

equals() 메서드를 사용했을 때 같다고 나오게 하고싶으면 equals() 메서드를

오버라이딩 하면 된다.

 

Pokemon의 이름과 내가 비교하려고 하는 대상의 이름이 같아?

 

오버라이딩을 통해 true가 나오는 모습을 볼 수 있다.

 

근데, 주소를 비교하는 상황이 아니라, 값을 비교하는 상황이라면,

 

주체가 객체가 아니고  String이나 int 등등이면 값을 비교하기 때문에

오버라이딩을 하지 않고서도 값이 같다고 나오는걸 확인 할 수 있다.

 

즉, int 타입의 값을 비교하는 상황이면 주체.getNum() == 주체.getNum()

이라면 값을 비교하는 상황이기 때문에 상관이 없다.

 

String 타입이라도 값을 비교하는 상황이면 주체.getName().equals(주체.getName())

name 이라는 값을 비교하기에 오버라이딩을 하지 않아도 name이 같다면 같다고 나오게 된다.

 

예시

 

예시

 

 

true로 잘 나오는 것을 확인 할 수 있다.

[ 정리 ]

 

== 연산자는 원시타입
int, double, char, boolean, ...

.equals() 메서드 객체
String, 사용자 정의 타입.

포켓몬 a 가 포켓몬 b와 같아?
a.equals(b)   => 포켓몬
=> Object 최상위 클래스가 갖고있어서 그냥된다. 
=> 다만, 내 맘대로 안될뿐 ~
=> 메서드 재정의 == 오버라이딩.
=> .equals() 오버라이딩 내 맘대로 ~


포켓몬 a의 레벨 이 포켓몬 b의 레벨과 같아?
a.level == b.level


포켓몬 a의 속성 이 포켓몬 b의 속성과 같아?
a.getProperty().equals(b.getProperty())
=> a.getProp() 가 .equals()의 주체(주어)
=> String

반응형

'Java (국비) > Java 메모' 카테고리의 다른 글

다형성 메모  (0) 2023.05.27
다형성 (다운캐스팅) 메모  (0) 2023.05.25
4주차 복습  (0) 2023.05.25
MVC 패턴 느낀점  (0) 2023.05.25
MVC (Model-View-Controller) 메모 2  (0) 2023.05.24