String 간의 비교에는 사용할 수 있으나,
byte[]를 기반으로 생성된 String 등의 비교에는 적절하지 않다.
아래와 같은 경우에는 주소 값을 비교.
public class Case1 {
public static void main(String[] args) {
String a = "aa";
byte[] bb = new byte[] {'a','a'};
String b = new String(bb);
System.out.println(a); // aa
System.out.println(b); // aa
System.out.println(a == b); // false
}
}
순수하게 문자열을 비교한다.
public class Case2 {
public static void main(String[] args) {
String a = "aa";
byte[] bb = new byte[] {'a','a'};
String b = new String(bb);
System.out.println(a); // aa
System.out.println(b); // aa
System.out.println(a.equals(b)); // true
}
}
장점
1. 순수하게 문자열을 비교할 수 있다.
2. 정적 문자열을 앞에 배치함으로써 NullPointError 를 방지할 수 있다.
String str = null;
str.equals(""); // NullPointError
"".equals(str); // 정상 작동
주소값을 동일하게 변경해 준다.
case 1과 같은 상황에서도 주소값 비교가 아닌, 문자열 비교를 가능하게 한다.
public class Case3 {
public static void main(String[] args) {
String a = "aa";
byte[] bb = new byte[] {'a','a'};
String b = new String(bb);
System.out.println(a); // aa
System.out.println(b); // aa
System.out.println(a == b.intern()); // true
}
}