我在Android应用中运行了以下代码
Integer.parseInt("+91");
Run Code Online (Sandbox Code Playgroud)
在Android 5.0(Lollipop)中,它没有抛出任何异常,因为它+91
是一个整数.但是在Android 4.4.x(KitKat)和更低版本中它会抛出:
NumberFormatException:无效的Int:"+ 91"
Android的版本如何导致这种差异?
Mar*_*lts 45
+
在此提交中添加了对显式的支持:
Support explicit + in Byte, Short, Integer, Long.
Bug: 5239391
Change-Id: I2b25228815d70d570d537db0ed9b5b759f25b5a3
Run Code Online (Sandbox Code Playgroud)
已包括在内android-5.0.0_r1
.如果您已获取Git存储库,则可以使用以下命令进行验证:
git tag --contains 6b40837ee3a023bba698c38fd6d6e46ae0065a55
Run Code Online (Sandbox Code Playgroud)
给你的
android-5.0.0_r1
android-5.0.0_r2
android-5.0.0_r3
...
Run Code Online (Sandbox Code Playgroud)
尽管文档可以给见解,为什么进行了更改(实现Java 7的行为,其他的答案指出),分析源代码的历史给出最准确的答案时,行为改变,因为文件不一定与实现.
Lau*_* L. 10
它适用于Java 7之后.
Android 5引入了新的parseInt功能,如Java 7版本 - Martin Nordholts的答案点正是修订版
所以这意味着你的Lollipop使用了一个基于Java 7的更新的sdk,它也有parseInt方法和符号处理部分.
KitKat确实在Android sdk 19中引入了一些java 7功能,但不是新的parseInt.较低版本使用较早的parseInt实现(Java 6的版本),因此它们显然也会失败.
parseInt实现之间的区别: Java 6 parseInt文档与Java 7 parseInt文档