리터럴이란 소스코드의 고정된 값을 대표하는 용어
int myInt = 123; byte myByte = 38; short myShort = 2;
여기서 123, 38, 2는 '정수 리터럴'
기본적으로는 int 자료형이지만
byte나 short 변수의 초기값으로 설정하면 아무 문제 없이 값이 들어간다.
long myLong = 12345678910; // 오류: 정수 값이 너무 크다
여기서도 오른쪽 12345678910은 int 리터럴인데,
int가 담을 수 있는 범위를 넘어섰기 때문에 오류가 난다.
이 문제를 해결하기 위해서는 뒤에 L을 붙여주면 된다.long myLong = 12345678910L;
12345678910L은 정수 리터럴이 아니라 '롱 리터럴'
long e = 123; long f = 123L; // long의 리터럴 표현방법 float g = 3.14; // 오류: 형이 맞지 않음. 필요한 값: float, 발견된 값: double float h = 3.14f; // float의 리터럴 표현방법 float i = 314f; // float의 리터럴 표현방법 double j = 3.14; double k = 314d; // double의 리터럴 표현 방법
Type Size Range
byte 1 byte -128 ... 127
short 2 byte -32,768 ... 32,767
int 4 byte -2,147,483,648 ... 2,147,483,647
long 8 byte -9,223,372,036,854,775,808 ... 9,223,372,036,854,775,807
float 4 byte 1.4023985 x 10^-45 ... 3.4028235 x 10^38
double 8 byte 4.940656458412465 x 10^-324 ... 1.797693134862316 x 10^308
위에서 부터 아래로 갈수록 랭크가 높은 자료형
자바의 숫자 자료형들은 위에서 배운 랭크에 따라 형 변환이 가능
바꾸고자 하는 형(to)이 기존의 형(from)보다
넓은 데이터를 담을 수 있는 자료형일 경우
특별한 처리 없이 형을 변환할 수 있다.
int a = 36; double b = a; // int to double short c = 17; long d = c; // short to long float e = 3.14f; double f = e; // float to double
값(혹은 변수) 앞에 (자료형)(예: (int) x)을 적어주면 강제적으로 형을 변환시킬 수 있다.
물론 형 변환이 가능한 경우에 대해서만 가능
숫자 자료형들 사이에서는 모두 가능
int a = 3; double b = (double) a; long c = (long) a; System.out.println(b); System.out.println(c);
3.0 3
!! 더 큰 랭크의 값을 더 작을 랭크의 변수에 담는 것도 가능하지만,
데이터의 손실이 있다는 걸 주의 !!
double pi = 3.14; int myInt = (int) pi; // 데이터 손실 (소수 부분) System.out.println(myInt);
3
int a = 9, b = 5; System.out.println(a / b);
1
이렇게 정수값 a와 b가 주어졌을 때, 9 / 5를 하면 1이 나온다
여기서 1.8이 나오게 하고 싶으면 타입 캐스팅을 해서 9를 9.0으로 바꿔주고, 9.0 / 5를 계산하면 된다!
int a = 9, b = 5; System.out.println((double) a / b);
1.8