Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코테
- 자바
- 백준
- 다익스트라
- SWEA
- 다시보기
- Spring
- DP
- 그리디
- SSAFY
- DFS
- 코딩테스트실력진단
- 코딩테스트
- Union Find
- 부분수열의합2
- JUnit
- 완전탐색
- database
- 기본유형
- BFS
- 완탐
- 유니온파인드
- 그래프
- 싸피
- 알고리즘기본개념
- 트러블슈팅
- 코드트리
- JPA
- 알고리즘
- Java
Archives
- Today
- Total
HwangHub
[Java] 문자열 비교 ==, equals() 본문
문자열 String
자바에서는 String이라는 객체를 통해서 문자열을 저장한다. 하지만 유독 문자열은 다른 자바 객체와는 다르게 구현되어 있다.
인간이 자바를 통해 가장 많이 사용하는 객체인 String은 우리가 일반적으로 객체를 생성할 때 사용하는 new 연산자를 사용하지 않고 바로 문자열 값을 할당하여 사용한다. (new 연산자를 사용해서 객체를 생성할 순 있지만, 권장하지 않는다.)
String 변수에 값을 바로 할당하여 생성하는 것을 문자열 리터럴 생성이라고 부른다.
public void string() {
String name = "lxxjn0"; // 문자열 리터럴 생성
String name1 = new String("lxxjn0"); // new 연산자를 이용한 문자열 생성
}
String Constant Pool이라는 문자열 리터럴만을 위한 공간이 Heap의 일부에 할당되어 있고, String 변수에 문자열 값을 바로 대입하는 경우 String Constant Pool에 저장된다. 하지만, new 연산자를 사용하는 경우에는 다른 객체와 마찬가지로 메모리의 일반적인 heap 영역에 할당된다.
public void string() {
String name = "lxxjn0";
String name1 = "lxxjn0";
String name2 = new String("lxxjn0");
String name3 = new String("lxxjn0");
}
위 코드를 통해 생성된 각 문자열 객체들이 Heap에 어떻게 할당되는지를 표현한 그림은 다음과 같다.
문자열 비교 연산
문자열은 객체이기 때문에 참조형 타입이다. 따라서 같은 곳을 가리키고 있지 않는 이상 ==연산이 작동하지 않는다. 따라서 name == name1을 수행한다면 true가 나오지만, name==name2를 하면 false가 나오게 되며, name2==name3도 마찬가지로 false가 나오게 된다.
따라서 좀 더 안전하고 확실하게 문자열의 내용이 일치하는지 확인하기 위해서는 .equals()을 사용해야 한다.
String name = "hello";
String name1 = new String("hello);
System.out.println(name == name1); // false
System.out.println(name.equals(name1)); // true
참조:
'무엇을 합니다 > 기술이해' 카테고리의 다른 글
[JPA] OSIV (0) | 2023.06.28 |
---|---|
[JPA] 연관관계 컬렉션 필드 조회 최적화 : 엔티티/DTO 조회 방식 (0) | 2023.06.28 |
[Spring] 패키지 구성 : repository와 query 분리 (0) | 2023.06.28 |
[JPA] 컬렉션 LAZY Loading시 페이징 기법 (0) | 2023.06.27 |
[JPA] (컬렉션) JOIN FETCH (0) | 2023.06.27 |
Comments