Почему подчеркивания в числовых литералах в Java SE 1.7 отличаются в восьмеричном и шестнадцатеричном правилах?Разве Октал не нарушает правила? - PullRequest
0 голосов
/ 12 октября 2018

Согласно подчеркиванию oracle doc нельзя ставить в начале числа, что просто отлично.Но когда дело доходит до восьмеричного числа, мы можем поставить подчеркивание в начале.Разве это не странно?

int x1 = 0x_52;            // Invalid; cannot put underscores at the beginning of a number
int x2 = 0_52;             // OK (octal literal)

1 Ответ

0 голосов
/ 12 октября 2018

Правило таково:

В качестве разделителей между цифрами, обозначающими целое число, допускаются подчеркивания.

Существует разница в том, что составляет цифры которые обозначают целое число , когда дело доходит до литералов с префиксом radix, для hex / binary:

... целое число обозначается только цифрами после 0x или 0b символов и перед суффиксом любого типа.Поэтому подчеркивания могут появляться не сразу после 0x или 0b или после последней цифры в цифре .

Hoverver для Octal .

В десятичном или восьмеричном литерале целое число обозначается всеми цифрами в литерале перед суффиксом любого типа.Поэтому подчеркивания могут не появляться перед первой цифрой или после последней цифры цифры. Подчеркивания могут появляться после начального 0 в восьмеричной цифре (поскольку 0 - это цифра, обозначающая часть целого числа) и после начального ненулевого числа в ненулевом десятичном литерале.

Ссылка: https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1

...