본문 바로가기

반응형

이번 강의에서는 자바에서 문자열을 비교할 때 사용하는 == 연산자와 .equals() 메서드의 차이를 예제를 통해 명확히 이해해봅니다.
자바에서 문자열은 객체이기 때문에, 단순히 ==으로 비교하면 "값"이 아니라 "주소(참조)"를 비교하게 됩니다.
문자열 내용이 같은지를 비교하고 싶다면 반드시 .equals()를 사용해야 합니다.


📌 예제 코드

public class EqualsExample {
	public static void main(String[] args) {
		String str1 = "홍길동", str2 = "홍길동";
		System.out.println("str1과 str2는 참조가 " + (str1 == str2 ? "같다." : "다르다."));
		if(str1.equals(str2))
			System.out.println("str1과 str2는 문자열이 같다.");
		
		String str3 = new String("홍길동"), str4 = new String("홍길동");
		System.out.println("str3과 str4는 참조가 " + (str3 == str4 ? "같다." : "다르다."));
		if(str3.equals(str4))
			System.out.println("str3과 str4는 문자열이 같다.");
	}
}

💬 코드 설명

  • String str1 = "홍길동", str2 = "홍길동";
    → 문자열 리터럴은 String 상수 풀에 저장되므로 같은 객체를 참조
  • str1 == str2
    → 참조(주소)가 같으므로 true
  • str1.equals(str2)
    → 문자열 내용 비교 → true
  • String str3 = new String("홍길동"), str4 = new String("홍길동");
    → new를 사용하면 항상 새로운 객체 생성
    → 참조는 다르지만 문자열 내용은 같음
  • str3 == str4
    → 서로 다른 객체 → false
  • str3.equals(str4)
    → 문자열 내용은 같으므로 true

💻 실행 결과

str1과 str2는 참조가 같다.
str1과 str2는 문자열이 같다.
str3과 str4는 참조가 다르다.
str3과 str4는 문자열이 같다.

📌 간단 정리

비교 방식 비교 대상 결과 설명
== str1 vs str2 TRUE 상수 풀의 같은 참조
.equals() str1 vs str2 TRUE 내용 같음
== str3 vs str4 FALSE 서로 다른 객체
.equals() str3 vs str4 TRUE 내용 같음

💡 포인트 정리

  • ==는 주소(참조) 비교 → 객체가 같은지 여부
  • .equals()는 문자열의 내용(값) 비교
  • 문자열 비교 시에는 반드시 .equals() 사용!
  • new String("...")은 항상 새 객체를 생성하므로 주의
댓글