[IT] JAVA

[자바] long, float 타입 변수 초기화 시 L, F 식별자 사용 이유

오리엔탈킴 2023. 4. 26. 14:57

자바에서 long이나 float 데이터 타입의 변수를 선언하고 아래와 같이 특정 값으로 초기화하려고 하면, 아래와 같은 에러가 발생을 하게 됩니다.

long long1 = 12345678912;
float float1 = 123.123;
  • Integer number too large
  • Required type: float / Provided: double

 

12345678912나 123.123과 같은 고정된 데이터를 리터럴(literal)이라고 하는데, 이 리터럴들은 자바가 실행될 때 메모리의 별도의 Data Area (Constant pool)에 공간을 할당받아 저장되어 있게 됩니다. 자바에서는 이 리터럴의 기본 데이터 타입을 정수의 경우 int로, 실수의 경우 double로 저장이 되게 됩니다.

위의 예시처럼 12345978912는 int의 범위인 -2147483648 ~ 2147483647를 넘어가는 수 이므로 int형 데이터가 될 수 없습니다. 따라서 12345978912 리터럴을 long 데이터 타입으로 선언을 위해서 맨 뒤에 L이나 l 식별자를 사용하게 됩니다. long 변수에 int 범위 안에 정수를 선언해도 에러가 안나는 이유는 int 리터럴이 자동으로 long으로 형변환 되기 때문입니다.

float의 경우도 동일하게 실수 리터럴의 기본 데이터 타입인 double로 결정이 되기 때문에, 123.123 리터럴을 float 타입으로 저장이 되도록 하기 위해서 맨뒤에 F나 f 식별자를 붙여서 선언을 하게 됩니다.

아래와 같이 초기화를 하게 되면 정상적으로 동작하게 됩니다.

long long1 = 12345678912L;
float float1 = 123.123F;

 

반응형