[자바]_equals_(새싹)

Kingyj·2024년 12월 9일

cmd.equals()

두 객체가 같은지를 비교할 때 쓰는 메서드이다.

왜 equals()가 필요할까?

==라는 걸로 비교할 수도 있다.
하지만 ==는 장난감 이름이 아니라, "이 장난감이 어디에 놓여 있는지"를 비교한다.
그래서 이름을 제대로 확인하려면 equals()를 써야 한다.

String 내장난감 = "로봇";
String 친구장난감 = "로봇";

if (내장난감.equals(친구장난감)) {
    System.out.println("우와! 너랑 나랑 똑같은 장난감이네!");
} else {
    System.out.println("우리는 다른 장난감을 가지고 있어.");
}

if / else를 활용하여 위와 같은 코드를 생성하면 String의 내 장난감과 친구의 장난감 내용이 같으면 똑같은 장난감이라는 결과를 출력한다.

우와! 너랑 나랑 똑같은 장난감이네!

반대로,

String 내장난감 = "로봇";
String 친구장난감 = "자동차";

if (내장난감.equals(친구장난감)) {
    System.out.println("우와! 너랑 나랑 똑같은 장난감이네!");
} else {
    System.out.println("우리는 다른 장난감을 가지고 있어.");
}

내용이 다르면 else의 값이 출력된다.


==와 equals()의 차이점

  • ==는 장난감이 놓여 있는 위치(주소)를 비교한다.
    • 예를 들어, 네가 가지고 있는 장난감이 책상 위에 있고, 친구의 장난감이 바닥에 있다.
    • 이름은 똑같이 "로봇"이어도, 위치가 다르면 "다른 장난감"이라고 생각하는 것이다.
String 내장난감 = new String("로봇"); // 새로 만든 장난감
String 친구장난감 = new String("로봇"); // 또 다른 새로 만든 장난감

if (내장난감 == 친구장난감) {
  System.out.println("장난감 위치도 같고, 같은 장난감이야!");
} else {
  System.out.println("이건 위치가 달라서 다른 장난감처럼 보이네!");
}

결과

이건 위치가 달라서 다른 장난감처럼 보이네!
  • equals()는 장난감 이름(내용)을 비교해요.
    • 이번에는 장난감이 어디에 놓여 있든 상관없이, 이름이 같으면 "같은 장난감"이라고 생각해요.
String 내장난감 = new String("로봇"); // 새로 만든 장난감
String 친구장난감 = new String("로봇"); // 또 다른 새로 만든 장난감

if (내장난감.equals(친구장난감)) {
    System.out.println("이건 이름이 같아서 같은 장난감이야!");
} else {
    System.out.println("이건 이름이 달라서 다른 장난감이야.");
}

결과

이건 이름이 같아서 같은 장난감이야!

왜 이런 차이가 생길까?

==는 "주소(메모리에 저장된 위치)"를 비교한다.
네 장난감과 친구 장난감이 둘 다 "로봇"이어도, 새로 만든 장난감이라면 다른 위치에 저장돼서 ==로 비교하면 다르다고 나오는 것이다.

equals()는 "내용(이름)"을 비교한다.
그래서 장난감이 어디 있든 이름만 같으면 같다고 출력 된다.

0개의 댓글