== 연산자와 equals() 메서드의 차이를 명확하게 말로 설명하기 위해 작성해 봄
1. == 연산자
== 연산자는 기본적으로 두 객체의 참조(메모리 주소)를 비교한다.
두 객체가 동일한 메모리 위치를 가리키는 경우에만 true를 반환하고, 그렇지 않으면 false를 반환함.
기본 데이터 타입(예: 정수, 실수)의 경우에는 값 비교가 이루어진다.
1
2
3
4
5
6
7
|
String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = str1;
String str4 = "Hello"; String str5 = "Hello"; System.out.println(str1 == str2); // false (다른 메모리 위치)
System.out.println(str1 == str3); // true (동일한 메모리 위치)
System.out.println(str4 == str5); // true (동일한 메모리 위치) |
cs |
위에서 str1와 str2는은 new로 생성하였기 때문에 Heap 영역에 각각 다른 메모리주소로 새롭게 생성된다.
그렇기에 두 개를 ==으로 비교하였을 때 메모리 위치가 달라서 false가 뜨게 된다.
하지만 str3은 str1의 메모리주소를 참조하도록 만들어졌기 때문에 ==으로 비교했을 때 true가 뜬다
여기에서 주의할 점은 str4와 str5는 리터럴을 이용한 방식으로 만들어졌기 때문에 String pool이라는 영역에 생성된다.
str4가 먼저 "Hello"를 String pool 안에 생성하고 str5는 String pool에 이미 "Hello"가 있기 때문에 그 값을 참조하게 된다.
그렇기에 str4와 str5를 ==으로 비교하였을 때 true가 뜨게 되는 것이다.
2. equals() 메서드
equals() 메서드는 객체의 참조(메모리 주소)가 아닌 내용(값) 자체를 비교한다.
1
2
3
4
5
|
String str1 = new String("Hello");
String str2 = new String("Hello");
String str3 = "Hello"; System.out.println(str1.equals(str2)); // true (내용이 동일)
System.out.println(str1.equals(str3)); // true (내용이 동일) |
cs |
그렇기에 str1과 str2를 비교해도 true가 뜨고 str1과 str3을 비교해도 true가 뜬다.
참조값을 비교하고 싶으면 == 을 사용하고 값 자체를 비교하고 싶다면 equal을 사용해야겠다.
'JAVA' 카테고리의 다른 글
JAVA : JSON String을 Map으로 Map을 JSON String으로 바꾸기 (0) | 2023.01.04 |
---|---|
java.util.Base64 사용 시 jdk 1.7 버전으로 인한 오류 (1) | 2023.01.04 |
JAVA : 속이 비어있는 삼각형 만들기 (0) | 2022.08.22 |
JAVA - 클래스의 구성 (0) | 2022.07.15 |
JAVA - 클래스와 객체 (0) | 2022.06.20 |
댓글