[JAVA] 57. equals()

문정준's avatar
Feb 18, 2025
[JAVA] 57. equals()
문자열 비교
비교 연산자 (==) 와 equals()의 차이점
 

1. 오브젝트의 주소

  • 주소가 다르고 값이 다르면, 오브젝트는 각각 다른 해시코드를 반환
package ex17; class Animal { } public class Ha02 { public static void main(String[] args) { Animal a1 = new Animal(); Animal a2 = new Animal(); System.out.println(a1.hashCode()); System.out.println(a2.hashCode()); } }
notion image
 

2. 값의 반환 방법

  • int : 주소를 찾아가면 이 있음
  • String : 주소를 찾아가면 주소가 있음 (참조 주소)
    • 참조 주소를 찾아가야 값이 있음
  • String의 경우 String Constant Pool의 성질에 의해 동일한 값은 자동으로 생성하지 않음
  • 다른 변수라 하더라도 같은 주소를 가리키게 됨
  • new String() : 문자열을 String Constant Pool이 아닌 Heap에 저장
    • 다른 공간에 저장되어 다른 주소의 해시값을 가짐
      • String 클래스 내의 hashCode() 메서드 재정의로 인한 주소 해시값 직접 비교는 불가
      • 두 String 객체를 비교연산자로 비교하면 false 출력
      • 두 String 객체를 equals()로 비교하면 true 출력
        • equals() : 두 문자열의 주소를 우선 비교하고, 다를 시 값까지 비교
package ex17; public class Ha03 { public static void main(String[] args) { // int : 찾아가면 값이 있음 int n1 = 1; int n2 = 1; System.out.println(n1 == n2); // String : 찾아가면 주소가 있음 (참조 주소를 따라가면 값) String s1 = "A"; String s2 = "A"; System.out.println(s1 == s2); System.out.println("A" == "A"); System.out.println(s1 == "A"); s2 = s2 + "B"; // 최종 주소 찾아가기 String s3 = new String("A"); String s4 = new String("A"); System.out.println(s3 == s4); // equals() : == (주소) 비교 후 다르면 값 비교 System.out.println(s3.equals(s4)); } }
 

결과

notion image
Share article

sxias