// Literals.java
// https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
public class Literals {
public static void main(String[] args) {
int hexRepresentation = 0x1a;
long bytes = 0b11010010_01101001_10010100_10010010;
long maxLong = 0x7fff_ffff_ffff_ffffL;
long phoneNumber = 010_1987_1994L;
final float PI = 3.14_15F;
double doublePrecision = 1.234e2;
String spanishWord = "S\u00ED Se\u00F1or";
final char BACKSPACE = '\b', TAB = '\t';
final char FORM_FEED = '\f', CARRAGE_RETURN = '\r', LINE_FEED = '\n';
final char SINGLE_QUOTE = '\'', BACK_SLASH = '\\';
System.out.printf("The max of long integer > phone number = %b\n", maxLong > phoneNumber);
System.out.printf("%c%c%c", 'a', BACKSPACE, 'c');
System.out.printf("%c%c%c%c", 'a', LINE_FEED, 'c', LINE_FEED);
}
}
위와 같은 Literals.java 파일을 Visual Studio Code 에서 생성하게 되면, 아래 사진과 같이 변수phoneNumber 가 문제가 발생한다고 알려준다.
변수phoneNumber 의 데이터 타입은 long , Oracle Java Tutorial 1 에 따르면 long 타입은 다음과 같이 정의되어 있다.
- long: The long data type is a 64-bit two's complement integer. The signed long has a minimum value of - and a maximum value of -1. ...
따라서 최대값이 9,223,372,036,854,776,000 - 1 까지 가능하다는 것인데, 그에 한참 못 미치는 1,019,871,994 이라는 값이 long 타입을 벗어났다고 나온다.
이 부분은 기초적인 부분을 놓치고 있었다. 오라클 튜토리얼에서 안내하는 정수형 Literal 은 hexadecimal, decimal, binary 만 소개되어있으니, 8진수에 대해 잊고 있었다. 결국은 0으로 시작하는 정수는 8진수 표현이고 거기에 8과 9를 넣었으니 범위를 벗어난다고 나온 것이다.