Programing Language/JAVA

New String 과 Literal String

칼쵸쵸 2021. 2. 22. 20:54

String 객체를 생성하는 방법은 2가지 방법이 존재한다.

String new ("String")

String을 생성하는 기본적인 방법

객체를 생성 시마다 값과 상관없이 힙 메모리에 새로운 영역을 할당함

String a = new String("hi");
String b = new String("hi");

 

위와 같이 a 와 b 는 같은 "hi" 라는 값을 가지지만 힙 메모리에 각각 새로운 데이터를 저장함

 

Literal String

 String 객체는 모든 객체를 통틀어 유일하게 변수값에 직접 리터럴로 값을 할당가능함

리터럴 객체로 문자열을 저장 시 String Pool이라는 고유의 영역에 데이터를 저장하며 값을 체크하여 중복된값은 같은 같은 레퍼런스를 가지게 만듦 (객체를 재사용함)

String Pool은 JDK 1.7 이전에는 힙 메모리와 다른 고유의 영역에 존재하였으나 1.7 이후에는 힙메모리 내부에 존재하게 됨

String a = "hi";
String b = "hi";

위와 같은 경우 자바는 a와 b를 같은 주소값을 가지게 함

 

이를 == Operator와 Equals 메서드의 차이를 통해 확인 가능

 

1. == Operator는 각 객체의 주소값을 비교

2. equals 메서드는 각 객체의 값을 비교

 

ex)

String a1 = new String("hi");
String a2 = new String("hi");
String a3 = "hi";
String a4 = "hi";

a1==a2 //false
a1.equals(a2) //true
a3==a4 //true
a3.equals(a4) //true