728x90
반응형
1. String.equals() – 인스턴스 메서드
str1.equals(str2);
str1이 null이면 NullPointerException(NPE) 발생- 비교 대상인
str1이 null이 아님이 확실할 때만 사용 - 주로
String,Integer,Boolean등Object.equals()를 override한 클래스에서 사용
❗ 예외 발생 예시
String a = null;
String b = "hello";
System.out.println(a.equals(b)); // ❌ NPE 발생
2. Objects.equals() – static 메서드
Objects.equals(a, b);
- 내부적으로
a == b || (a != null && a.equals(b))로 처리 - 비교 대상 중 null이 있어도 NPE가 발생하지 않음
- 더 안전한 객체 비교 방법
- 자바 7 이상에서 사용 가능
✅ 안전한 비교 예시
String a = null;
String b = "hello";
System.out.println(Objects.equals(a, b)); // false (예외 없음)
3. 핵심 비교
| 항목 | String.equals() |
Objects.equals() |
|---|---|---|
| 메서드 타입 | 인스턴스 메서드 | static 메서드 |
| Null 안전성 | ❌ null.equals(...) 시 NPE 발생 |
✅ null 안전 |
| 사용 조건 | null 아님을 확신할 때 | null 가능성 있을 때 |
| 사용 범위 | String, Integer 등 클래스 비교 |
모든 객체 비교 가능 |
4. 언제 어떤 걸 써야 할까?
- 객체가 null일 수 있다면 →
Objects.equals(a, b) - null이 아님을 확실히 보장할 수 있다면 →
a.equals(b)도 가능 - 실무에서는 방어적 프로그래밍 관점에서
Objects.equals()를 선호
✅ 마무리
String.equals()는 빠르고 명확하지만 null 체크가 반드시 필요합니다. 반면 Objects.equals()는 더 안전하며 null 가능성이 있는 환경에서 널리 사용됩니다.
간단한 비교이지만, 실수로 인한 NPE를 방지하기 위해 이 차이를 잘 이해하고 사용하는 것이 중요합니다.
728x90
반응형
'Programming > Java' 카테고리의 다른 글
| Java Stream Sum (0) | 2023.06.12 |
|---|---|
| [Java] Optional API (0) | 2023.04.09 |
| [Java] Stream API (0) | 2023.04.09 |
| [Java] 스트림 API - 01 (0) | 2023.04.05 |
| [Java] - 7. 자바 8 API의 기본 메서드와 스태틱 메소드 (0) | 2023.04.04 |