Подчеркивание между цифрами
Неправильно добавлен символ подчеркивания, как показано ниже:
int i = 1_5;
Но не ошибка компиляции. Почему так? Выход идет так, как если подчеркивание игнорируется. Тогда почему такая функция в Java?
Ответы
Ответ 1
См. Подчеркивает числовые литералы:
В Java SE 7 и более поздних версиях любое количество символов подчеркивания (_) может появляются где-нибудь между цифрами в числовом литерале. Эта особенность позволяет вам, например, разделять группы цифр в числовом литералы, которые могут улучшить читаемость вашего кода.
Вы не дали хорошего примера, так как 15 читается даже без разделения цифр на 1_5
. Но возьмите, например, номер: 100000000000, трудно сказать, что это такое, не считая цифр, так что вы можете сделать:
100_000_000_000
что облегчает идентификацию числа.
В вашем примере попробуйте:
int i = 1_5;
System.out.println(i); //Prints 15
Ответ 2
Это новая функция, действительная с Java 7. Она улучшает читаемость ваших литеральных значений.
В соответствии с Малой Гуптой OCA_Java_SE_7_Programmer_I_Certification_Guide_Exam_1Z0-803:
Обратите внимание на использование символов подчеркивания в числовом литеральном значении. Вот некоторые из
правила:
1) Вы не можете начинать или заканчивать буквенное значение с помощью подчеркивания.
2) Вы не можете выделить подчеркивание сразу после префиксов 0b, 0B, 0x, и 0X, которые используются для определения двоичного и шестнадцатеричного литералов значения.
3) Вы можете поместить нижнее подчеркивание справа после префикса 0, который используется для определения восьмеричного литерального значения.
4) Вы не можете помещать знак подчеркивания до суффикса L (суффикс L используется для обозначения буквального значения как можно дольше).
5) Вы не можете использовать подчеркивание в позициях, где строка цифр ожидается.
Действительные примеры:
long baseDecimal = 100_267_760;
long octVal = 04_13;
long hexVal = 0x10_BA_75;
long binVal = 0b1_0000_10_11;
Недопустимые примеры:
int intLiteral = _100;
int intLiteral2 = 100_999_;
long longLiteral = 100_L;