[JAVA] '=='연산자와 equals() 메서드 차이

손지민·2024년 4월 15일

Java 기초

목록 보기
12/13
post-thumbnail

개요

'==' 연산자와 equals() 메서드는 둘 다 객체 비교를 위해 사용되지만, 그 동작 방식과 사용 목적에 차이점이 있습니다.

요약

'==' 연산자는 두 객체의 참조(메모리 주소)를 비교
'equals()' 메서드는 두 객체의 내용(값)이 같은지를 비교

개념

1. == 연산자

  • '==' 연산자는 두 객체의 참조(메모리 주소)가 같은지를 비교합니다.
  • 기본 타입(primitive types) 변수에 대해서는 값 비교를 수행합니다.
int num1 = 10;
int num2 = 20;
int num3 = 10;

boolean result1 = (num1 == num2);  // false
boolean result2 = (num1 == num3);  // true

System.out.println(result1);  // false
System.out.println(result2);  // true
  • 참조 타입(reference types) 변수에 대해서는 객체의 실제 내용이 아닌 메모리 주소를 비교합니다.
String str1 = new String("hello");
String str2 = new String("hello");
String str3 = str1;

System.out.println(str1 == str2);  // false (참조가 다름)
System.out.println(str1 == str3);  // true  (참조가 같음)

2. equals() 메서드

  • 'equals()' 메서드는 두 객체의 내용이 같은지를 비교합니다.
  • 'Object' 클래스에서는 equals() 메서드가 '==' 연산과 동일한 참조 비교를 수행하도록 구현되어 있지만, 많은 자바 클래스들에서 'equals()' 메서드는 객체의 내용을 비교하도록 재정의(override)되어 있습니다.
  • 예를 들어, String 클래스에서는 equals() 메서드가 문자열의 내용을 비교하도록 재정의되어 있습니다.
String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1.equals(str2));  // true  (내용이 같음)

정리

객체의 내용 비교를 위해서는 equals() 메서드를 사용하는 것이 일반적으로 더 적합하며, 참조 비교를 위해서는 == 연산자를 사용합니다.

profile
Developer

0개의 댓글