比较Java中的两个整数对象

时间:2015-09-28 13:12:49

标签: java integer compare

这不是一个重复的问题!我不是比较两个整数,而是一个整数和一个int值。而且,我要问的是人们怎么想我不想告诉我如何正确比较......

我只是想知道你如何看待将Integer类型的对象与这样的int值进行比较:

final Integer i = null; //I'm setting it to null just to show that my test will not throw a NullPointerException, otherwise I could used a simple `int`
if (i == Integer.valueOf(3))
    ...

我发现对此有用的是,无需检查我的对象是否为空。此外Integer.valueOf()缓存对象......

3 个答案:

答案 0 :(得分:2)

这是一个坏主意,因为它可以给你错误的结果。

final Integer i = Integer.valueOf(Integer.MAX_VALUE);
System.out.println(i == Integer.valueOf(Integer.MAX_VALUE));

为您提供false

我猜你尝试了一些小数字,他们给了你正确的结果。但是,一旦您尝试的数字高于127或低于-128,您的结果很可能是错误的

  

public static Integer valueOf(int i)

     

[...]   此方法将始终缓存   值范围为-128到127(包括),并可以缓存其他值   超出此范围。

Source

答案 1 :(得分:1)

恕我直言,它不会使代码更容易阅读,使其更容易出错(因为并非所有值都被缓存),并且它甚至不比“传统”方法更快。如果你使用旧的equals()

,你可以自己做,也可以帮助你的开发人员

无论如何,我认为没有人应该将==用于对象,如果它们意味着价值平等。此规则的唯一例外是枚举。

答案 2 :(得分:1)

检查Integer.valueOf java docs: 此方法将始终缓存-128到127(含)范围内的值,可以缓存此范围之外的其他值。

可以缓存,也可以不缓存,因此在这种情况下,您的代码将无效。