Integer.parseInt 和 NumberFormatException on Android

2022-09-01 01:25:26

我在我的安卓应用中运行了以下代码

Integer.parseInt("+91");

Android 5.0(棒棒糖)中,它没有像整数那样引发任何异常。但是在Android 4.4.x(KitKat)和更低版本中,它抛出了:+91

数字格式例外: 无效 Int : “+91”

Android版本是如何导致这种差异的?


答案 1

在此提交中添加了对显式的支持:+

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行为),但分析源代码的历史记录可以最准确地回答行为何时更改,因为文档不一定与实现相匹配。


答案 2

这种行为实际上是Java 7的一部分,正如文档所述:

将字符串参数分析为有符号十进制整数。字符串中的字符必须全部为十进制数字,但第一个字符可以是 ASCII 减号“-”(“\u002D”)表示负值,也可以是 ASCII 加号“+”(“\u002B”)表示正值。

但是,在Java 6中,只有符号被接受。-

Android SDK 21+具有JDK7依赖项,这大概就是您遇到这种行为的原因。


推荐