[英]Why do == comparisons with Integer.valueOf(String) give different results for 127 and 128?
[英]Why do the Integer.valueOf(…) comparisons in this example return different values?
从答案到关于java中的原始类型和自动装箱的问题 :
对于biziclop:
class biziclop {
public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); System.out.println(new Integer(500) == new Integer(500)); System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); }
}
结果是:
C:\\Documents and Settings\\glow\\My Documents>java biziclop false false true false C:\\Documents and Settings\\glow\\My Documents>
这是为什么?
Integer.value根据Java语言规范的要求缓存对象的值为零。
受ilya的回答启发,请参阅即将发布的JDK7第638-643行中Integer.valueOf()的最新实际来源 。
请参阅Integer.valueOf实现: http ://docjar.com/html/api/java/lang/Integer.java.html(850s行)
您应该使用等于方法而不是==运算符。 ==测试两个对象是否相等,但是您创建具有相同值的不同对象,并且需要使用equal()
方法来比较对象的值。
更新:
Integer.valouOf(5)
和Integer.valouOf(500)
不同行为的原因确实是Integer实现使用大小为-128..127的静态valueOfCache。
从Java 7开始,可以使用命令行参数-XX:AutoBoxCacheMax=<size>
Integer.valueOf缓存值,特别是-128到127。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.