Integer.parseInt 和 NumberFormatException on Android
我在我的安卓应用中运行了以下代码
Integer.parseInt("+91");
在Android 5.0(棒棒糖)中,它没有像整数那样引发任何异常。但是在Android 4.4.x(KitKat)和更低版本中,它抛出了:+91
数字格式例外: 无效 Int : “+91”
Android版本是如何导致这种差异的?
我在我的安卓应用中运行了以下代码
Integer.parseInt("+91");
在Android 5.0(棒棒糖)中,它没有像整数那样引发任何异常。但是在Android 4.4.x(KitKat)和更低版本中,它抛出了:+91
数字格式例外: 无效 Int : “+91”
Android版本是如何导致这种差异的?
在此提交中添加了对显式的支持:+
Support explicit + in Byte, Short, Integer, Long.
Bug: 5239391
Change-Id: I2b25228815d70d570d537db0ed9b5b759f25b5a3
已包含以 开头的 。如果您已经获取了 Git 存储库,则可以使用以下命令进行验证:android-5.0.0_r1
git tag --contains 6b40837ee3a023bba698c38fd6d6e46ae0065a55
这给了你
android-5.0.0_r1
android-5.0.0_r2
android-5.0.0_r3
...
尽管文档可以深入了解为什么进行更改(如其他答案所指出的那样,为了实现Java 7行为),但分析源代码的历史记录可以最准确地回答行为何时更改,因为文档不一定与实现相匹配。
这种行为实际上是Java 7的一部分,正如文档所述:
将字符串参数分析为有符号十进制整数。字符串中的字符必须全部为十进制数字,但第一个字符可以是 ASCII 减号“-”(“\u002D”)表示负值,也可以是 ASCII 加号“+”(“\u002B”)表示正值。
但是,在Java 6中,只有符号被接受。-
Android SDK 21+具有JDK7依赖项,这大概就是您遇到这种行为的原因。