[Java] .equals()와 ==의 차이

2025. 10. 3. 18:11Dev./Java

728x90
반응형

== 연산자

구분 종류 비교  특징
기본형 byte, short, int, long, float, double, char, boolean 값 비교 값 자체를 저장, 객체가 아님
참조형 String, 배열(int[]), 클래스 객체 등 주소 비교 실제 값은 힙에 저장, 변수는 객체 주소를 가짐
//기본형
int a = 5;
int b = 5;
System.out.println(a == b); // true (값 비교)

//참조형
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false (서로 다른 객체)

.equals() 메소드

  • 객체의 내용 자체를 비교
  • 대부분의 클래스(String, Integer 등)는 equals()를 내용 비교용으로 오버라이드 함
  • 참조형만 가능
Stack                     Heap
+---------+               +---------+
| s1      |  ------------>| "hello" |  ← 새 객체
+---------+               +---------+
| s2      |  ------------>| "hello" |  ← 새 객체
+---------+               +---------+


//참조형 문자열 내용 비교
String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1.equals(s2)); // true (문자열 내용 비교)

//참조형 객체 주소 비교
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false (서로 다른 객체)

요약

  • 기본형 → 값 자체 비교 → == 사용
  • 참조형 → 객체 주소 비교 → == 사용
  • 참조형 내용 비교.equals() 사용
  • Integer, Double, String 등 대부분 Wrapper 클래스는 .equals() 오버라이드 되어 있음
728x90
반응형

'Dev. > Java' 카테고리의 다른 글

[Java] Java 메서드(Method) 와 객체화  (0) 2025.10.14
[Java] HashSet  (0) 2025.10.10
[Java] 타입 변환 (int, double, char, String)  (0) 2025.10.02
[Java] for문과 향상된 for문  (0) 2025.09.30
[Java] Java 문자열 String / StringBuilder  (0) 2025.09.29