String을 Null Safe하게 비교
str1.equals(str2)
- s1이 null이면 당연히 NullPointerException
@Test
void test1() {
String s1 = null;
String s2 = null;
assertThatThrownBy(() -> s1.equals(s2)).isInstanceOf(NullPointerException.class);
}
java.util.Objects.equals(Object, Object)
- java7 부터 기본 ~
- 둘 다 null이면 true를, 둘 중 하나가 null이면 false를, 그렇지 않으면 equals의 결과를 리턴
- nullable한 객체에서 메소드를 호출하는게 아니라 static 메소드이므로 NullPointerException의 발생 가능성이 없음.
@Test
void test3() {
assertThat(Objects.equals(null, null)).isTrue();
assertThat(Objects.equals("hello", null)).isFalse();
assertThat(Objects.equals(null, "world")).isFalse();
assertThat(Objects.equals("hello", "hello")).isTrue();
assertThat(Objects.equals("hello", "world")).isFalse();
}
Apache Commons
- apache commons 라이브러리의 StringUtils.equals(str1, str2)
@Test
void test4() {
assertThat(StringUtils.equals(null, null)).isTrue();
assertThat(StringUtils.equals("hello", null)).isFalse();
assertThat(StringUtils.equals(null, "world")).isFalse();
assertThat(StringUtils.equals("hello", "hello")).isTrue();
assertThat(StringUtils.equals("hello", "world")).isFalse();
}