
리터럴(literal)은 프로그램 코드에서 고정된 값을 의미합니다. 즉, 리터럴은 변수에 저장되거나 표현식에서 사용되는 값 자체를 말합니다. 예를 들어, 정수, 실수, 문자, 문자열 등 다양한 타입의 리터럴이 있습니다.
자세히 설명하자면:
정수 리터럴: 숫자 자체를 의미합니다.
java
코드 복사
int a = 100; // 여기서 100은 정수 리터럴입니다.
실수 리터럴: 소수점이 있는 숫자입니다.
java
코드 복사
double b = 3.14; // 여기서 3.14는 실수 리터럴입니다.
문자 리터럴: 단일 문자입니다.
char c = 'A'; // 여기서 'A'는 문자 리터럴입니다.
문자열 리터럴: 큰 따옴표(")로 둘러싸인 문자열입니다.
String s = "Hello, World!"; // 여기서 "Hello, World!"는 문자열 리터럴입니다.
자바에서는 문자열 리터럴을 사용할 때, 컴파일러는 이를 String 상수 풀에 저장합니다. 상수 풀은 메모리의 특별한 영역으로, 동일한 문자열 리터럴이 여러 번 사용되더라도 메모리 낭비를 방지하기 위해 동일한 리터럴은 동일한 메모리 위치를 참조하게 됩니다.
예를 들어:
String s1 = "hello";
String s2 = "hello";
위 코드에서 s1과 s2는 동일한 문자열 리터럴 "hello"를 참조하므로, s1 == s2는 true를 반환합니다. 하지만 new 키워드를 사용하여 문자열 객체를 생성하면 새로운 메모리 위치에 저장되므로 참조가 다르게 됩니다.
String s3 = new String("hello");
이 경우 s3는 새로운 객체를 참조하므로, s1 == s3는 false를 반환하게 됩니다. 이처럼 리터럴은 값 그 자체를 의미하며, 자바에서 문자열 리터럴은 메모리 효율성을 위해 상수 풀에 저장되어 관리됩니다.