가장 많이 사용하는 정수형 자료형은 int
이며 4byte이다. int로 표현할 수 있는 값의 범위는 -(2^31) ~ (2^31)-1이다.
byte
, short
, long
은 각각 1byte, 2byte, 8byte이다.
long형은 자바에서 정수를 표현하는 가장 큰 자료형이다. long으로 변수를 선언할 때는 주의할 점이 있다.
int num1 = 12345678900; //오류
long num2 = 12345678900; //오류
위와 같이 코드를 작성하면 두줄 모두 오류가 난다. 첫번째줄에서 오류가 나는 이유는 int형이 표현 가능한 값의 범위를 벗어났기 때문이다. 그런데 같은 값을 long으로 표현해도 오류가 난다. 왜 그럴까?
자바는 모든 정수 값을 기본으로 int형으로 처리하기 때문이다. 따라서 이 경우에는 long형이라는 것을 알려주기 위해 다음과 같이 숫자 뒤에 L
이나 l
을 붙여주어야한다.
long num = 12345678900L;
물론 int형의 유효 범위 이내에 있는 값을 long으로 선언할때는 L을 붙이지 않아도 된다.
float
형보다 double
형을 쓸 때 실수를 좀 더 정밀하게 표현할 수 있다.
자바에서 실수를 표현할 때는 double
이 기본으로 사용된다. 따라서 float
형으로 실수를 표현하고 싶다면 실수뒤에 F
또는 f
를 붙여서 명시해야한다.
double num1 = 3.14;
float num2 = 3.14F;
JAVA 10부터 변수 선언시 자료형을 명시하지 않아도 컴파일러가 스스로 자료형을 추론하여 선언해주는 문법이 추가되었다. (local variable type inference)
var num =10;
var str = "Hello";
과 같은 코드를 컴파일러가
int num =10;
String str = "Hello";
라고 추론한다.
int inum = 10;
double dnum = 20.0;
System.out.println(inum+dnum);
//30.0
묵시적 형 변환과 반대의 경우 -> 자료 손실이 발생할 수 있음
프로그래머가 변환할 자료형을 직접 써줘야함
int inum = 10;
double dnum = 20.0;
System.out.println(inum+(int)dnum);
//30
상수(constant)란, 변수와 달리 변하지 않는 값이다. 자바에서는 상수를 final
예약어를 통해 선언한다. 상수는 값을 변경하려고 하면 에러가 난다.
final double PI = 3.14;
final int MAX_NUM = 100;
//주로 상수 이름은 대문자를 사용
리터럴(literal)/ 리터럴 상수란, 프로그램에서 사용하는 모든 숫자, 문자, 논리값(true, false)을 일컫는 말이다.
int num = 10;
char ch = 'A';
final double PI = 3.14;
여기에서 10
,'A'
,3.14
가 모두 리터럴이다. 리터럴은 프로그램 실행시 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀(constant pool)
에 놓인다.
예를 들어 int num = 10;
에서 10을 num에 대입하려면 10이라는 상수가 메모리 공간 어딘가에 존재해야 num에 복사를 해 줄 수 있다. 이 때 10이 바로 상수 풀에 존재하는 것이다.