2015-01-06 2 views
15

Ошибочно подчеркивание добавлено, как показано ниже:Подчеркивание между цифрами

int i = 1_5; 

Но не ошибка компиляции. Почему так? Выход идет так, как если подчеркивание игнорируется. Тогда почему такая особенность в Java?

+2

Действительно, так как Java 7 ... – fge

+5

Сво функций. Помогает с большим количеством. –

ответ

27

Underscores in Numeric Literals См:

В Java SE 7, а затем любое число символов подчеркивания (_) может появляться в любом месте между цифрами в числовой литерал. Эта функция позволяет вам, например, разделять группы цифр в числовых литералах, что может улучшить читаемость вашего кода.

Вы не дали хорошего примера, так как 15 можно читать даже без разделения цифр на 1_5. Но возьмите, например, номер: 100000000000, это трудно сказать, что это без подсчета цифр, так что вы можете сделать:

100_000_000_000 

, что делает его легче идентифицировать номер.

В вашем примере, попробуйте:

int i = 1_5; 
System.out.println(i); //Prints 15 
+0

Если бы был какой-то способ, мы могли бы поставить комментарии рядом с кодом:/ – musefan

+5

Мы не должны предоставлять комментарии, чтобы прояснить семантику языка, вместо этого мы должны изучить язык (или использовать google/stackoverflow). – Gio

5

Это новая функция, действует с 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; 
Смежные вопросы