专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  分享一次 ShardingJDBC ... ·  昨天  
芋道源码  ·  Guava黑魔法:在日志脱敏场景下的奇遇 ·  2 天前  
芋道源码  ·  面试官:int(1) 和 int(10) ... ·  2 天前  
芋道源码  ·  入职第一天,看了公司代码,牛马沉默了 ·  3 天前  
51好读  ›  专栏  ›  ImportNew

Integer.valueOf(String) 方法之惑

ImportNew  · 公众号  · Java  · 2017-05-12 13:43

正文

请到「今天看啥」查看全文



有个仁兄在 StackOverflow 上发起了一个问题,是这么问的:


“ 我被下面的代码搞晕了,为什么它们会返回不同的值?”


System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));

System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));

System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));


输出是:


true

false

true


为什么第一个判断返回了true而第二个判断返回了false? 127和128有什么我不知道的区别吗?(当然除了127小于128…)


还有,为什么第三个判断返回了true?


我看了另一个相关提问的回答,但是我还是不知道它们什么时候返回true还有为什么第二个判断返回false。


回答#1:


Integer.valueOf(String)确有一个不同寻常的行为。


valueOf会返回一个Integer(整型)对象,当被处理的字符串在-128和127(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回true-127这个整型对象是被缓存的(所以两次valueOf返回的是同一个对象)——第二行的调用返回false是因为128没有被缓存,所以每次调用,都会生成一个新的整型对象,因此两个128整型对象是不同的对象。







请到「今天看啥」查看全文