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议不要使用+
,因为如果你有一个负整数,你只需要一个符号。