앞에 0이 있으면 정수 해석이 혼동됩니다
정수 리터럴을 처리할 때 앞에 0이 있으면 예상치 못한 결과가 발생할 수 있습니다. 다음 코드를 고려해 보세요.
System.out.println(0123); // prints 83 System.out.println(123); // prints 123
첫 번째 줄에서 123 대신 83이 인쇄되는 이유는 무엇입니까? 핵심은 선행 0에 있습니다.
8진수 해석
정수 리터럴에서 선행 0은 숫자가 8진수(base-8)로 표현된다는 것을 나타냅니다. 8진수를 10진수로 변환하려면 오른쪽에서 왼쪽으로 각 숫자에 적절한 8의 거듭제곱을 곱하고 결과를 더합니다.
0123의 경우 다음과 같습니다.
(1 * 8 * 8) + (2 * 8) + (3) = 83
따라서 0123은 10진수 값 83으로 해석됩니다.
Why No Octal 부동 소수점?
신기하게도 Java에서는 8진수 부동 소수점 리터럴을 허용하지 않으므로 이 동작은 정수에만 적용됩니다.
모범 사례
혼란을 피하기 위해 숫자를 다음과 같이 해석하도록 특별히 의도하지 않는 한 정수 리터럴에 앞에 0을 사용하지 않는 것이 일반적으로 권장됩니다. 8진수.
위 내용은 Java에서 `0123`이 `83`을 인쇄하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!