关注
最简单的办法就是看源码。
先来看一下parseInt的注释:
注释中说,是通过查看第0个字符是否为'-'来判定负数,而不是看最高位是否为1。如此一来好像解释的通了。再看一下真正的转换过程(这里我调了一下源码的排版,不然惨不忍睹...):
确实如注释中所说,此时,一个32位且最高位为1的二进制数,会被错误的判定为正数。而在下面有这样一行代码:
可以看到,一个32位且最高位为1的二进制数,会被累加32次,所以其累加和是超过Integer正数的范围的。实际上不用等到第二个红框位置,在if(reult<multmin)时,就已经抛出异常了。multmin我觉得为了防止result*radix后溢出而设置的。代码的运行结果也印证了这个推测:
另外,result每次是加上负的digit,这是因为Integer的表示范围是-2的32次方到2的32次方-1.正数的值要小,那么在计算一个负数时,如果遵循先正向累加再求负的过程,是有可能溢出的。最终的结果输出可以很明显的看到是result是负数:
查看原帖
点赞 评论
相关推荐
07-16 18:53
门头沟学院 Java 点赞 评论 收藏
分享
07-01 22:55
兰州城市学院 Java 点赞 评论 收藏
分享
07-21 17:02
门头沟学院 嵌入式软件开发 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 校招阶段,学历VS技术哪个更重要? #
7245次浏览 97人参与
# 顺丰求职进展汇总 #
52652次浏览 283人参与
# 不卡学历的大厂有哪些? #
13567次浏览 103人参与
# 腾讯音乐求职进展汇总 #
96616次浏览 563人参与
# 没有合适的工作,你会先找个干着,还是考公考研 #
120938次浏览 1144人参与
# 除了主业以外,你还有哪些其他收入? #
5317次浏览 95人参与
# 实习时,大家都怎么称呼自己的mentor? #
42707次浏览 270人参与
# 摸鱼被leader发现了怎么办 #
60405次浏览 368人参与
# 视觉/交互/设计招聘信息汇总 #
17852次浏览 612人参与
# 实习如何「偷」产出? #
21751次浏览 258人参与
# 社恐入职新公司如何融入团队 #
10544次浏览 62人参与
# 风评不好的公司,你会去吗? #
44004次浏览 315人参与
# 考研可以缓解求职焦虑吗 #
53274次浏览 474人参与
# 职场新人体验 #
12922次浏览 138人参与
# 实习打杂,要跑路吗 #
11123次浏览 146人参与
# 校园里的破防时刻 #
6351次浏览 75人参与
# 金融财经春招备战日记 #
22457次浏览 134人参与
# 求职遇到的搞笑事件 #
121376次浏览 795人参与
# 大学最后一个寒假,我想…… #
47820次浏览 580人参与
# 毕业旅行去哪玩儿 #
13975次浏览 136人参与