코린이의 소소한 공부노트

변수와 리터럴의 타입 일치/불일치 본문

Java

변수와 리터럴의 타입 일치/불일치

무지맘 2021. 12. 8. 01:58

1. 변수에 리터럴을 대입할 때 기본적으로 같은 타입의 리터럴을 대입한다.

boolean boo = true;
char c = 'A';
int i = 2;
long l = 10_0000_0000L; // 접미사 l 생략 가능
float f = 3.14f;
double d = 2.72; // 접미사 d 생략 가능

 

2. 변수의 범위가 리터럴의 범위보다 클 경우, 타입이 달라도 대입 가능하다.

int i = 'A';
// char는 문자를 숫자 코드로 바꿔서 저장한다.
// 'A'는 10진수로 표현하면 65
// 따라서 i에는 65가 저장된다.

long l = 10;
// long은 int보다 표현 가능한 정수의 범위가 크다.
// 즉, int 집합은 long 집합의 부분집합이다.
// 따라서 정수 리터럴을 long 변수에 대입해도 아무 문제가 없다.

double d = 2.72f;
// double은 float보다 표현 가능한 실수의 범위가 크다.
// 즉, float 집합은 double 집합의 부분집합이다.
// 따라서 float 리터럴을 double 변수에 대입해도 아무 문제가 없다.

 

3. byte와 short의 경우, int보다 범위는 작지만 int로 자동 변환되기 때문에 int의 리터럴을 쓴다.

byte b = 100;
// byte는 -128부터 127까지의 정수 표현 가능

b = 128;
// byte의 표현 범위를 벗어나므로 에러 발생

short s = 200;
// short은 -32,768부터 32,767까지의 정수 표현 가능

// int는 -21억부터 21억까지의 정수 표현 가능

 

4. 변수의 범위가 리터럴의 범위보다 작을 경우, 에러가 발생한다.

int i = 30_0000_0000;
// int의 표현 가능 범위를 벗어낫기 때문에 에러 발생

long l = 3.14f;
// 저장공간은 long이 8 byte, float이 4 byte로 long이 더 크지만,
// 정수보다 실수의 범위가 더 크므로 에러 발생

float f = 3.14;
// 우변은 접미사 d가 생략된 double 리터럴
// float보다 double의 범위가 더 크므로 에러 발생

 

'Java' 카테고리의 다른 글

printf()를 이용한 형식화된 출력  (0) 2021.12.12
문자와 문자열  (0) 2021.12.08
변수, 상수(constant), 리터럴(literal), 접미사  (0) 2021.12.07
변수 선언 & 명명 규칙  (0) 2021.12.06
변수의 데이터 타입(data type)  (0) 2021.12.06