Literals

이성준·2023년 7월 14일

Java Notes

목록 보기
1/5
// 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 가 문제가 발생한다고 알려준다.

Literals.java

변수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 -2632^{63} and a maximum value of 2632^{63}-1. ...
  • long : long 데이터 타입은 64 비트 2의 보수 정수이다. 부호있는 long 타입은 최소값이 -2632^{63}, 최대값이 2632^{63}-1 이다. ...(후략)

따라서 최대값이 9,223,372,036,854,776,000 - 1 까지 가능하다는 것인데, 그에 한참 못 미치는 1,019,871,994 이라는 값이 long 타입을 벗어났다고 나온다.

이 부분은 기초적인 부분을 놓치고 있었다. 오라클 튜토리얼에서 안내하는 정수형 Literal 은 hexadecimal, decimal, binary 만 소개되어있으니, 8진수에 대해 잊고 있었다. 결국은 0으로 시작하는 정수는 8진수 표현이고 거기에 8과 9를 넣었으니 범위를 벗어난다고 나온 것이다.

profile
기록

0개의 댓글