== 연산자
| 구분 |
종류 |
비교 |
특징 |
| 기본형 |
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() 오버라이드 되어 있음