String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");
str1, str2
- 문자열을 리터럴로 선언하면, 자바 컴파일러가 String Constant Pool 영역에 저장한다.
- 같은 값의 문자열의 주소를 공유하여 메모리 사용량을 최적화 한다.
str3, str4
- new 연산자를 사용하여 새로운 문자열 객체를 생성하면 Heap 영역에 저장되며 다른 주소를 할당 받는다.
==
==연산자는 두 문자열의 주소값이 같은지 비교한다.
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
- 두 객체가 메모리에서 동일한 위치를 가리키는지 확인한다.
equals()
두 문자열의 내용을 비교한다.
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
- 두 문자열이 동일한 값을 가지고 있는지를 확인한다.