자바 컴파일러는 접미사가 없는 숫자(리터럴)를 무조건 다음 기본 타입으로 인식한다
- 정수 기본 타입:
int(4 byte) - 실수 기본 타입:
double(8 byte)
따라서 접미사를 생략하면 다음과 같은 문제가 발생할 수 있다.
1. long에 L을 생략할 경우 ➡️ “숫자 크기에 따라 다름”
접미사가 없으면 컴파일러는 해당 숫자를 무조건 int로 취급한다.
int범위(약 ±21억) 이내: 정상 작동 (int→long으로 자동 형변환됨)int범위 초과: 컴파일 에러 💥 (int메모리 공간을 넘어서므로 아예 읽어들이지 못함)
long num1 = 100; // 정상: int형 100이 long으로 자동 형변환되어 들어감
long num2 = 3000000000; // 에러: 21억을 넘어 int 범위를 초과함 (Integer number too large)
long num3 = 3000000000L; // 정상: 'L'을 붙여 처음부터 long 타입임을 명시
2. float에 f를 생략할 경우 ➡️ “무조건 에러”
소수점이 있는 숫자는 접미사가 없으면 double(8 byte)로 인식한다.
double(8 byte)이라는 큰 데이터를 더 작은 공간인 float(4 byte) 변수에 넣으려는 상황이 되므로, 값의 크기와 상관없이 항상 데이터 손실 에러가 발생한다.
float pi1 = 3.14; // 에러: double 값을 float 변수에 억지로 넣을 수 없음 (Type mismatch)
float pi2 = 3.14f; // 정상: 'f'를 붙여 float 타입임을 명시
💡 요약
| 변수 타입 | 필수 접미사 | 접미사 생략 시 인식 타입 | 결과 |
|---|---|---|---|
| long | L (또는 l) |
int |
약 21억 초과 시 에러, 이내는 정상(자동 형변환) |
| float | f (또는 F) |
double |
무조건 에러 (데이터 크기 불일치) |