new를 통해서 문자열 만드는 방법과 literal 을 통해서 문자열 만드는 방법의 차이점
new keyword
String s1 = new String("Java");
String s2 = new String("Java");
string literal
String s3 = "Java";
String s4 = "Java";
String literal 방법은 String pool 메모리에 생성된다.
jdk 1.7 이전에는 heap 메모리 영역과 string pool 메모리 영역이 따로 있었으나
jdk 1.7 이후에는 heap 메모리 내부에 string pool 영역이 존재하게 되었다.
String pool 영역에서는
기존에 같은 내용을 가진 데이터가 있으면 새로 만들지 않고 원래 있는 것을 재사용하는 특징이 있다.
그림을 보면 이해하기 쉽다.
따라서 같은 문자열을 재사용하는 경우, 메모리를 고려하여 Stirng literal을 사용하는 것이 더 효율적이라는 결론을 유추할 수 있다.
== operator 와 equals( ) 의 차이점은 무엇일까??
== operator
문자열 내용보다 주소값이 같은지 확인한다.
equals( )
주소값 상관없이 문자열 컨텐츠를 비교한다.
예를 들어서 위 그림을 봤을 때
s3 == s4
: false
s3.equals(s4)
: true
s1 == s2
: true
s1.equals(s2)
: true
이런 결과값이 나온다.
정리
new( ) 생성자는 heap 메모리에 String object를 생성한다.
String literal 은 String pool 에 생성되고 재사용한다.
== operator는 String reference를 비교한다.
equals( ) 메소드는 String content를 비교한다.
'컴퓨터공학 > Java' 카테고리의 다른 글
CS> 추상 클래스와 인터페이스 사용의 차이점 (0) | 2021.07.03 |
---|---|
CS> Static의 의미는 무엇인가? (0) | 2021.07.03 |
CS> Overriding 과 Overloading 은 뭘까요? (0) | 2021.07.02 |
CS> String 과 String buffer의 차이점은?? (0) | 2021.07.02 |
CS> 자바에서 Stack 과 Heap의 메모리 구조 차이점은?? (0) | 2021.07.02 |