변수: 하나의 값을 저장하기 위한 공간
상수: 값을 한번만 저장할 수 있는 공간
리터럴: 그 자체로 값을 의미하는 것
int triangleAtrea = (20 * 10) / 2;
int rectangleArea = 20 * 10;
위의 코드는 삼각형과 사각형의 면적을 구해서 변수에 저장한다. 이 코드를 20과 10이 아닌 다른 값을 이용하려면 여러 곳을 수정해야한다.
final int WIDTH = 20;
final int HEIGHT = 10;
int triangleArea = (WIDTH * HEIGHT) / 2;
int rectangleArea = WIDTH * HEIGHT;
상수를 이용해서 기존의 코드를 변경한 것이다. 의미가 더욱 명확해지고 다른 값을 이용하기 위해서는 상수의 초기화만 다른 값으로 하면된다.
따라서 상수는 리터럴에 의미있는 이름을 붙여서 코드의 이해와 수정을 쉽게 만든다.
리터럴의 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장범위가 넓은 타입에 좁은 타입의 값을 저장하는 것은 허용된다.
int i = 'A'; //OK, 문자 'A'의 유니코드인 65가 변수에 저장된다.
long i = 123; //OK, int보다 long 타입이 범위가 더 넓다
double i = 3.14f; //OK, float보다 double의 저장범위가 더 넓다.
리터널의 값이 변수의 타입의 범위를 넘어서거나, 리터럴의 타입이 변수의 타입보다 저장범위가 넓으면 컴파일 에러가 발생한다.