这不是一个重复的问题!我不是比较两个整数,而是一个整数和一个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()
缓存对象......
答案 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(包括),并可以缓存其他值 超出此范围。
答案 1 :(得分:1)
恕我直言,它不会使代码更容易阅读,使其更容易出错(因为并非所有值都被缓存),并且它甚至不比“传统”方法更快。如果你使用旧的equals()
。
无论如何,我认为没有人应该将==
用于对象,如果它们意味着价值平等。此规则的唯一例外是枚举。
答案 2 :(得分:1)
检查Integer.valueOf java docs: 此方法将始终缓存-128到127(含)范围内的值,可以缓存此范围之外的其他值。
可以缓存,也可以不缓存,因此在这种情况下,您的代码将无效。