为什么本示例中的 Integer.valueOf(...) 比较返回不同的值?

发布于 2024-10-20 19:29:15 字数 606 浏览 1 评论 0原文

从关于基本类型和java中的自动装箱:

对于比西克洛普:

类比西克洛普{

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
错误的
错误的
真的
错误的

C:\Documents and Settings\glow\我的文档>

这是为什么?

From the answer to a question about primitive types and autoboxing in java:

for 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));
}

}

Results in:

C:\Documents and Settings\glow\My Documents>java biziclop
false
false
true
false

C:\Documents and Settings\glow\My Documents>

Why is that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

沩ん囻菔务 2024-10-27 19:29:15

Integer.valueof 根据 Java 语言规范的要求缓存零左右值的对象。

受到伊利亚的回答的启发参见即将发布的 JDK7 中 Integer.valueOf() 的最新实际源代码,第 638-643 行。

Integer.valueof caches objects for values around zero as required by the Java Language Specification.

Inspired by ilya's answer see the latest, actual source for Integer.valueOf() in the upcoming JDK7, lines 638-643.

尾戒 2024-10-27 19:29:15

参见Integer.value的实现: http://docjar.com/html/api /java/lang/Integer.java.html(850s 行)

See Integer.valueOf realization: http://docjar.com/html/api/java/lang/Integer.java.html (850s line)

凉宸 2024-10-27 19:29:15

Integer.valueOf 缓存值,特别是 -128 到 127。

Integer.valueOf caches values, specifically -128 to 127.

安穩 2024-10-27 19:29:15

您应该使用 equal 方法而不是 == 运算符。 == 测试两个对象是否相等,但您创建具有相同值的不同对象,并且需要 equal() 方法来比较对象的值。

更新:
Integer.valouOf(5)Integer.valouOf(500) 行为不同的原因确实是 Integer 实现使用大小为 -128..127 的静态 valueOfCache。
从 Java 7 开始,可以使用命令行参数 -XX:AutoBoxCacheMax= 进行配置

You should use the equal method not the == operator. == test if two objects are equal but you create different objects with same value and need the equal() method to compare the object's values.

Update:
Reason for different behavior of Integer.valouOf(5) and Integer.valouOf(500) is indeed that Integer implementation uses a static valueOfCache of size -128..127.
As of Java 7 this is configurable with the command-line argument -XX:AutoBoxCacheMax=<size>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文