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
'Programing Language > JAVA' 카테고리의 다른 글
인터페이스와 디폴트, 스태틱 메서드 (0) | 2021.02.22 |
---|---|
Abstract Class와 Interface의 차이 (0) | 2021.02.22 |
String , StringBuffer , StringBuilder (0) | 2021.02.21 |
AutoBoxing vs UnBoxing (0) | 2021.02.21 |
Platform Independent Language (0) | 2021.02.21 |