[java] 문자 리터럴에서 이스케이프 된 숫자의 Java 의미는 무엇입니까 (예 : ‘\ 15’)?

다음 코드 섹션이 실행될 때 정확히 어떤 일이 발생하는지 설명하십시오.

int a='\15';
System.out.println(a);

이것은 13을 출력합니다;

int a='\25';
System.out.println(a);

이것은 21을 출력합니다;

int a='\100';
System.out.println(a);

이것은 64를 출력합니다.



답변

예를 들어 'a'(큰 따옴표로 구분되는 문자열 리터럴과 구별되는 것과 같이 "a") int변수 에 작은 따옴표로 구분되는 문자 리터럴을 할당했습니다 . Java는 부호없는 16 비트에서 부호 char있는 32 비트로 자동 확장 캐스트를 수행합니다 int.

그러나 문자 리터럴이 백 슬래시 뒤에 1-3 자리 숫자가있는 경우 문자의 8 진수 ( 기본 / 기수 8) 표현입니다. 그러므로:

  • \15= 1 × 8 + 5 = 13 (캐리지 리턴,과 동일 '\r')
  • \25 = 2 × 8 + 5 = 21 (NAK 문자-부정적 승인)
  • \100= 1 × 64 + 0 × 8 + 0 = 64 (@ 기호,와 동일 '@')

문자 리터럴 및 이스케이프 시퀀스에 대한 자세한 내용은 JLS 섹션을 참조하세요.

3.10.6 에서 BNF 를 인용하면 :

OctalEscape:
    \ OctalDigit
    \ OctalDigit OctalDigit
    \ ZeroToThree OctalDigit OctalDigit

OctalDigit: one of
    0 1 2 3 4 5 6 7

ZeroToThree: one of
    0 1 2 3


답변

표기법 \nnn은 Java의 8 진 문자 코드를 나타냅니다. 따라서 10 진수 13 int a = '\15'인 8 진수 15의 자동 캐스팅 된 값을 할당합니다 a.


답변

숫자를 따옴표로 묶었다는 사실은 숫자를 문자 리터럴로 해석하는 것 같습니다. 뒤에 오는 숫자는 8 진수 여야합니다.


답변