>Java >java지도 시간 >Java에서 `0123`이 `83`을 인쇄하는 이유는 무엇입니까?

Java에서 `0123`이 `83`을 인쇄하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-27 13:14:10819검색

Why Does `0123` Print `83` in Java?

앞에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.