그동안 Spring을 사용해 개발하면서
==
과equals()
의 큰 차이점을 모르는 채로 equals() 만 사용을 해왔습니다.이 부분에 대해 정확히 개념을 잡아보려고 합니다.
String 변수 생성
String 변수를 생성하는 방식에는 두가지 방식이 있습니다.
- literal 을 이용한 방식
- new 연산자를 이용한 방식
[literal을 이용한 방식]
string constant pool
이라는 영역에 존재하게 됩니다.- string constant pool 에 주어진 문자열이 있는지 검색합니다.
- 문자열이 있으면 해당 주소값을 반환
- 문자열이 없으면 string constant pool에 넣고 새로운 주소값을 반환
[new 연산자를 이용한 방식]
- Heap 영역에 존재합니다.
== 와 equals()
==
== 연산자는 비교하고자 하는 두개의 대상의 주소값을 비교합니다.
equals()
equals() 연산자는 비교하고자 하는 대상의 값 자체를 비교합니다.
코드로 알아보겠습니다
[Test Code]
@Test
void equals() {
String person1 = "tommy";
String person2 = "tommy";
String person3 = new String("tommy");
String person4 = new String("tommy");
// literal & literal 비교
System.out.println("literal & literal 비교");
System.out.println("person1, person2 '==' = " + (person1 == person2));
System.out.println("person1, person2 'equals' = " + person1.equals(person2));
// literal & String 비교
System.out.println("literal & String 비교");
System.out.println("person1, person3 '==' = " + (person1 == person3));
System.out.println("person1, person3 'equals' = " + person1.equals(person3));
// String & String 비교
System.out.println("String & String 비교");
System.out.println("person3, person4 '==' = " + (person3 == person4));
System.out.println("person3, person4 'equals' = " + person3.equals(person4));
}
[Test Result]
literal & literal 비교
person1, person2 '==' = true
person1, person2 'equals' = true
literal & String 비교
person1, person3 '==' = false
person1, person3 'equals' = true
String & String 비교
person3, person4 '==' = false
person3, person4 'equals' = true
person1
,person2
는 literal으로, person3
과 person4
는 String으로 생성했습니다.
[literal & literal]
- literal은 주소, 값이 같습니다.
- == : true
- equals() : true
[literal & String]
- literal 과 String은 주소는 다르고 값은 같습니다.
- == : false
- equals() : true
[String & String]
- String 과 String은 주소는 다르고 값은 같습니다.
- == : false
- equals() : true
'Java' 카테고리의 다른 글
Javadoc 이란? (0) | 2023.04.22 |
---|---|
Java EE 와 Java SE 뭐가 다른가요? (0) | 2023.04.21 |
final vs finally vs finalize (0) | 2023.04.18 |
좋은 객체 지향 설계의 5가지 원칙 (0) | 2023.04.05 |
다형성 (Polymorphism) (0) | 2023.04.05 |