В jdk1.7 мы можем использовать знак подчеркивания в int, int anInt = 0b10101000_01010001_01101000_01010001;
однако, если у нас есть строка с подчеркиванием, дефис, она дает исключение формата номера при преобразовании в int.
почему это так?
Помните о обратной совместимости?
Поэтому, если внедрить эту функцию, изменения будут внесены в JDK 7, тогда весь код, написанный в более ранних версиях java, также не будет генерировать это исключение, когда "_" было найдено в строке. Это будет очень серьезная проблема.
Тот факт, что вы можете использовать "_" в литералах, - это просто "синтаксический сахар" - это особенность языка Java, которая была добавлена для удобства.
Дизайнеры языка Java решили, что это "удобство" применимо только к исходному коду Java (обрабатывается компилятором Java); поэтому был обновлен только компилятор, чтобы разрешить такие шаблоны; но код "разбора", который выбрасывает исключения, не был изменен.
Скорее всего, основная причина заключалась в следующем: это что-то другое, чтобы писать приложения, которые анализируют номера из текста (по сравнению с тем, чтобы компилятор мог понимать "более читаемые" литералы).
Использование _ в integer используется, когда у вас есть группа цифр (возможно, смысл) как часть одной и той же переменной int, как в случае номера телефона (91_766986752), который является (code_number). но возвращаемое целое число равно только 91766986752.
ex - int anInt = 0b10101000_01010001_01101000_01010001;
В этом случае вы можете думать о каждой части как о некоторой разумной группе цифр для удобства пользователя или разработчика, чтобы понять, что int состоит из чего. Компилятор игнорирует эти _ и возвращает оставшуюся ценность int
В случае, если String преобразован в Integer, _ не игнорируется, что дает NumberFormatException, поскольку это не цифра.
Ex - String "91_766986752", когда преобразованный в int будет по-прежнему рассматривать _, а не игнорировать его.
Я не знаю, почему, его hapens, но вы можете сделать замену, подчеркивание, точкой.
что-то вроде:
String number = 1000_000;
number = number.replace('_','.');