String 문자열 생성 시 literal과 new 두가지 방식으로 가능하다.
String str = "Hello"; //literal
String str2 = new String("hello"); // new 객체 선언
둘다 JVM의 heap 영역에 저장되지만 literal은 heap 중에서 String Constant Pool에 저장된다고 한다.
String str = "hi";
String str2 = "hi";
System.out.println(str==str2);
// String Constant Pool에 hi라는 객체가 생성되었기 때문에 str2는 새로 생성되지 않고 그 객체를 참조한다.
// 그래서 주소값을 비교했을 때 true가 나온다.
new 연산자를 사용하면 새로운 객체를 생성하기 때문에 일반적인 heap 영역에 만들어진다.
String str1 = "hi";
String str2 = new String("hi");
String str3 = new String("hi");
System.out.println(str1 == str2); //false
System.out.println(str2 == str3); //false
intern 메소드
객체를 상수풀에 추가하여 상수풀에 있는 값을 참조하게 할 수 있다고 한다.
'Java' 카테고리의 다른 글
예외처리 (0) | 2022.05.30 |
---|---|
객체지향 프로그래밍, JVM (0) | 2022.05.22 |
Java 파일 기본구조 (0) | 2022.05.17 |
Package (0) | 2022.05.17 |
접근 제어자 (0) | 2022.05.17 |
댓글