(괄호 안에 수는 byte를 나타낸다)
new
연산자를 사용한다List<String> list = new List<>();
위 코드에서 list
는 List 클래스의 참조 변수이며 new List<>();
는 List 클래스의 인스턴스를 생성하고 그 메모리 주소를 list
변수에 할당한다
String 클래스는 참조형에 속하지만 기본형처럼 사용이 가능하다
우리가 String을 사용할때도 위와같이 사용한다
String str = "hi"; //가장 많이 사용
String str2 = new String("hi2"); // 참조 타입 형태로 사용
첫번째 방식은 String 리터럴을 사용하여 Heap 메모리 내의 "문자열 상수 풀(String Constant Pool)"에 저장한다
이러한 방식은 이미 존재하는 문자열을 재사용하여 메모리를 절약할 수 있다.
두번째 방식은 new 연산자를 사용하기때문에 String 객체를 Heap메모리에 저장한다.그렇기때문에 첫번째 방법보다 더 많은 메모리를 사용할 수 있다
그렇기때문에 재사용이 많고 메모리 효율성이 높은 String이 필요할때는 첫 번째 방법, 메모리 사용량이 더 많고 문자열 상수 풀과 별개로 객체를 생성하는 경우에는 두 번째 방법을 사용할 수 있다.
또한 String은 불변(immutable)하는 객체이기때문에 값을 변경해도 새로운 클래스 객체를 만들어낸다
String str = "hi";
String str2 = "java";
str = str + str2; // 기존 메모리 공간에 저장되는것이 아닌 새로운 메모리 공간에 hijava가 저장된다