Android上的Integer.parseInt和NumberFormatException

我在Android应用程序中运行以下代码

Integer.parseInt("+91"); 

在Android 5.0 (Lollipop)中,它没有抛出任何exception,因为+91是一个整数。 但是在Android 4.4.x (KitKat)及更低版本中,它会抛出:

NumberFormatException:无效的Int:“+91”

Android的版本如何引起这种差异?

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

 Support explicit + in Byte, Short, Integer, Long. Bug: 5239391 Change-Id: I2b25228815d70d570d537db0ed9b5b759f25b5a3 

已经包括从android-5.0.0_r1 。 如果您已经获取了Git存储库,则可以使用以下方法进行validation:

 git tag --contains 6b40837ee3a023bba698c38fd6d6e46ae0065a55 

这给你

 android-5.0.0_r1 android-5.0.0_r2 android-5.0.0_r3 ... 

尽pipe文档可以深入了解为什么进行了更改(为了实现Java 7的行为,正如其他答案所指出的那样),但分析源代码的历史可以提供最准确的答案,因为文档不一定匹配实现。

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

将string参数parsing为带符号的十进制整数。 string中的字符必须全部为十进制数字,但第一个字符可能是ASCII减号' – '('\ u002D')以指示负值或ASCII加号'+'('\ u002B')。表示一个正值。

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

Android SDK 21+具有JDK7依赖性,这可能是您遇到此问题的原因。

它在Java 7之后工作。

Android 5引入了新的parseIntfunction(如Java 7版本) – Martin Nordholts的回答正好指出了这一修订

所以这意味着你的棒棒糖使用了一个基于Java 7的更新的sdk,它也带有符号处理部分的parseInt方法。

KitKat确实在Android SDK 19中引入了一些Java 7function ,但是并没有引入新的parseInt。 较低版本使用parseInt(Java 6的版本)的较早实现,所以它们显然也会失败。


parseInt实现之间的区别: Java 6 parseInt文档与Java 7 parseInt文档

这是一个Java特定的问题。 正如你在文档中看到的那样, Java 6允许-而Java 7允许+-

使用Android版本19(KitKat)支持Java 7,所以你不会得到这个错误。 我build议不要使用+ ,因为如果你有一个负整数,你只需要一个符号。