자바 컴파일러는 접미사가 없는 숫자(리터럴)를 무조건 다음 기본 타입으로 인식한다

  • 정수 기본 타입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 무조건 에러 (데이터 크기 불일치)