NumberFormatException将字符串转换为具有下划线的int,jdk1.7中的连字符

时间:2015-03-06 16:58:54

标签: java

在jdk1.7中我们可以在int中使用下划线, int anInt = 0b10101000_01010001_01101000_01010001;

但是如果我们有一个带下划线的字符串,则在转换为int时,它会给出数字格式异常。

为什么会这样?

4 个答案:

答案 0 :(得分:0)

你可以在文字中使用“_”这一事实只是“语法糖” - 它是为了方便起见而添加的Java语言的一个特性。

Java语言的设计者认为这种“便利”仅适用于Java源代码(由Java编译器处理);因此只更新了编译器以允许这样的模式;但抛出异常的“解析”代码没有改变。

最有可能的是,潜在的推理是:编写从文本中解析数字的应用程序是不同的(相比之下,允许编译器理解“更易读”的文字)。

答案 1 :(得分:0)

当你有一组数字(可能有意义)作为同一个int变量的一部分时,使用整数_,就像电话号码(91_766986752)(code_number)一样。但返回的整数仅为91766986752.

ex - int anInt = 0b10101000_01010001_01101000_01010001;

在此,您可以将每个部分视为一组合理的数字,以方便用户或开发人员理解int由什么组成。编译器忽略这些_并返回剩余的int值

如果String转换为Integer,则不会忽略_,因此给出 NumberFormatException,因为它不是数字。

Ex - 字符串“91_766986752”转换为int时仍会考虑_而不是忽略它。

答案 2 :(得分:0)

还记得向后兼容吗?

  • 在早期版本的java中工作(或不工作)的所有代码即使更改了java版本也应该以相同的方式运行,

因此,如果要灌输此功能更改    将在JDK 7中制作,然后是所有早期编写的代码    当' _'时,java的版本也不会抛出此异常。是    在字符串中找到。这将是一个非常严重的问题。

答案 3 :(得分:-2)

我不知道为什么,它的hapens,但你可以用点做替换,下划线。

类似的东西:

String number = 1000_000;

number = number.replace('_','.');