728x90
String 변수 생성의 두가지 방법
- 리터럴
- new연산자 이용
1. 리터럴 방식
리터럴 방식으로 선언된 문자열들은 string constant pool이라는 영역에 존재하게 된다.
과정
String 내부의 intern() 메서드 호출.
intern() 메서드는 주어진 문자열이 string constant pool에 존재하는지 검색.
- 있다면: 주어진 문자열의 주소값을 반환.
- 없다면: string constant pool에 주어진 문자열을 새로 저장하고, 그 주소값을 반환.
2. new 연산자 이용
new연산자를 이용하여 생성된 문자열들은 Heap 영역에 존재하게 된다.
같은 값을 저장한다고 하더라도 다른 주소에 저장됨.
3. 위 두 방식의 차이
==연산자: 비교하고자 하는 두 대상의 주소값을 비교.
equals(): 비교하고자 하는 두 대상의 값 자체를 비교.
package compareStr;
public class doubleEqual {
public static void main(String[] args) {
String str1 = "apple"; //리터럴 방식 -> a라는 공간에 저장되었다고 가정.
String str2 = new String("apple"); //값은 같지만 new로 생성->b라는 공간에 저장되었다고 가정.
if(str1 == str2) {
System.out.println("두 값이 같다.");
}else {
System.out.println("두 값이 다르다."); //a공간의 apple과 b공간의 apple (다름)
}
String str3="apple"; //리터럴 방식 -> 이미 존재하는 값임 -> a(주소값)반환
if(str1 == str3) {
System.out.println("두 값이 같다."); //같은 a공간의 apple
}else {
System.out.println("두 값이 다르다.");
}
//값이 같은지만을 알아보자
if(str1.equals(str2)) {
System.out.println("두 값이 같다."); //a에 있던, b에 있던 일단 둘 다 apple임.
}else {
System.out.println("두 값이 다르다.");
}
if(str2.equals(str3)) {
System.out.println("두 값이 같다."); //a에 있던, b에 있던 일단 둘 다 apple임.
}else {
System.out.println("두 값이 다르다.");
}
}
}
실행결과
728x90
'자료구조' 카테고리의 다른 글
+) [JAVA] 힙정렬 알고리즘 정리 - heap sort (0) | 2023.03.15 |
---|---|
[알고리즘] 자바로 순열, 조합 (nPr, nCr) java (0) | 2023.03.05 |
+) static, final, static final 구분 (0) | 2023.02.21 |
+) JAVA BufferedReader & Scanner 차이, 버퍼란? (0) | 2023.02.21 |
스택(Stack), 큐(Queue), DFS & BFS 기본 개념 (0) | 2023.02.18 |