В выпуске JDK 1.7 появилось несколько полезных функций, несмотря на то, что большинство из них являются синтаксическим сахаром, их использование может значительно улучшить читаемость и качество кода. Одной из таких особенностей является введение подчеркивания в числовых литералах . Начиная с Java 7 вы можете записать длинную цифру, например, 10000000000, в более читаемый 10_000_000_000 в вашем исходном коде Java. Одна из наиболее важных причин использования подчеркивания в числовом литерале — избегать тонких ошибок, которые трудно понять, посмотрев на код. Трудно заметить отсутствующий ноль или дополнительный ноль между 10000000000 и 1000000000, чем 10_000_000_000 и 1_000_000_000. Поэтому, если вы имеете дело с большими числами в исходном коде Java, используйте подчеркивание в числах для улучшения читабельности . Между прочим, существуют правила использования подчеркивания в числовых литералах, поскольку они также являются допустимым символом в идентификаторе, их можно использовать только между цифрами, точно ни в начале числового литерала, ни в конце числового литерала. В следующих нескольких разделах мы узнаем, как реализовано подчеркивание в числовом литерале и правила его использования в числовых литералах.
Как подчеркивание в числах реализовано в Java
Как я уже сказал, это синтаксический сахар, очень похожий на то, как реализован String в переключателе , это также реализовано с помощью компилятора. Во время компиляции компилятор удаляет эти подчеркивания и помещает фактическое число в переменную. Например, 10_000_000 будет преобразовано в 10000000 во время компиляции. Поскольку у CPU нет проблем с обработкой длинных строк цифр, и это интересно для него, мы не беспокоимся об этом, это мы, бедные люди, которые сталкиваются с проблемой обработки длинных чисел. Эта функция особенно полезна для приложения, связанного с банковскими и финансовыми доменами, которое имеет дело с большой суммой денег, номером кредитной карты, номерами банковских счетов и другими доменами, которое имеет дело с более длинными идентификаторами. Несмотря на то, что настоятельно не рекомендуется писать конфиденциальные данные в файлах Java, и вы никогда не должны делать это в рабочем коде, жизнь с подчеркиванием в цифрах намного проще, чем раньше.
Правила использования подчеркивания в числах в Java
Язык программирования Java имеет строгий набор правил использования подчеркивания в числовых литералах. Как уже говорилось, вы можете использовать их только между цифрами. Вы не можете начать число с подчеркивания или закончить число с подчеркивания. Вот еще несколько мест, где вы просто не можете поместить подчеркивание в числовые литералы:
- В начале или конце числа
- Смежный с десятичной точкой в литерале с плавающей точкой
- До суффикса F или L
- В позициях, где ожидается строка цифр
Вот пара примеров, в которых показано допустимое и недопустимое использование подчеркивания в числовых литералах.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
float pi1 = 3_.1415F; // Invalid; cannot put underscores adjacent (before) to a decimal point float pi2 = 3 ._1415F; // Invalid; cannot put underscores adjacent (after) to a decimal point long socialSecurityNumber1 = 999_99_9999_L; // Invalid; cannot put underscores prior to an L suffix int a1 = _52; // This is an identifier, not a numeric literal, starts with underscore int a2 = 5_2; // OK (decimal literal) int a3 = 52_; // Invalid; cannot put underscores at the end of a literal int a4 = 5_______2; // OK (decimal literal) int a5 = 0_x52; // Invalid; cannot put underscores in the 0x radix prefix int a6 = 0x_52; // Invalid; cannot put underscores at the beginning of a number int a7 = 0x5_2; // OK (hexadecimal literal) int a8 = 0x52_; // Invalid; cannot put underscores at the end of a number int a9 = 0_52; // OK (octal literal) int a10 = 05_2; // OK (octal literal) int a11 = 052_; // Invalid; cannot put underscores at the end of a number |
Вот еще несколько примеров использования подчеркивания в числовых литералах
1
2
3
4
5
6
7
8
|
long creditCardNumber = 6684_5678_9012_3456L; // Never do it on production code long socialSecurityNumber = 333_99_9999L; // Never, Ever do it on production code float pi = 3 .14_15F; long hexBytes = 0xFF_EC_DE_5E; long hexWords = 0xCAFE_BABE; long maxLong = 0x7fff_ffff_ffff_ffffL; byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010; |
Вы можете видеть, что код гораздо удобнее для чтения, чем без подчеркивания в числах. Кстати, всегда используйте L для обозначения длинного литерала в Java. Хотя разрешено использовать маленький регистр l, вы никогда не должны использовать его с числами, так как он выглядит точно так же, как и цифра 1. Скажите, можете ли вы найти различия между 12l и 121, я думаю, не так много. Как насчет 12L и 121?
Короче говоря, всегда используйте подчеркивание в числах , особенно с длинными числами, чтобы сделать их более читабельными. Я знаю, что эта функция доступна только в Java 1.7, и пока она не широко используется, но, учитывая профиль Java 8, я ожидаю, что Java 8 будет принят сообществом быстрее и шире, чем Java 7.