JAVA

자바 String 리터럴과 객체 생성의 차이

D_Helloper 2023. 6. 1. 23:58

String str ="i"와 String str = new String("i")가 동일할까?

결론부터 말하자면, 다르다.

  • 첫 번째로 표기한 str과 두 번째로 표기한 str 변수는 동일한 문자열 값을 갖게 되지만 완전히 동일하지는 않음
  • 첫 번째 방식은 리터럴 표기
    • 객체 생성 없이 고정된 값을 그대로 대입
    • “i” 라는 문자열을 JVM의 String pool이라는 메모리 공간에 저장
    • 다시 동일한 문자열이 선언 될 경우, 미리 캐시된 문자열을 리턴
  • 두 번째 방식은 객체 생성 방식
    • new 키워드를 활용한 객체를 생성하는 방식
    • 매번 새로운 객체가 Heap 메모리 영역에 생성

 💡 String Pool은 문자열 리터럴을 저장하고 재사용하기 위한 메모리 영역으로서, JVM의 일부인 메모리 내부에 위치하며, 동일한 문자열 리터럴을 가진 다른 변수들이 해당 문자열 리터럴을 참조할 경우, String Pool에서 이미 생성된 동일한 String 객체를 참조