문자열 비교
비교 연산자 (==) 와 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());
}
}

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));
}
}
결과

Share article