为什么MAX_VALUE的两个整数的比较在java中失败?

时间:2015-12-10 13:59:27

标签: java

我在Java中有以下几行代码:

<div ng-if="someCondition"> </div>

为什么即使它们具有相同的值,它们也不相等?

4 个答案:

答案 0 :(得分:2)

Integer.MAX_VALUE会返回int。在执行Integer d = Integer.MAX_VALUE;时,它会int通过IntegerInteger.valueOf加到valueOf

由于默认情况下缓存来自[-128,127] public static void main(java.lang.String[]); Code: 0: ldc #3 // int 2147483647 2: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: astore_1 6: ldc #3 // int 2147483647 8: invokestatic #4 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; ,因此每次调用都会返回新实例。因此它们不是相同的参考文献。

您可以在生成的字节码中看到这一点:

Integer.valueOf

以及public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 的源代码:

UINavigationController *nav = [self.childViewControllers firstObject]; 
UIViewController *loginVC = [nav.viewControllers firstObject];

答案 1 :(得分:0)

您正在比较对象,而不是基元。

您应该使用d.equals(e);代替d == e

d == e评估对象是否相同,而不是。

答案 2 :(得分:0)

简单地说,IntegerObject而不是primitive值,

要检查对象是否相等,您需要使用equals方法

e.g。

if(d.equals(e)) {....}

答案 3 :(得分:0)

正如Sharonbn在评论中提到的那样。

尝试更改

Integer d = Integer.MAX_VALUE;
Integer e = Integer.MAX_VALUE;

int d = Integer.MAX_VALUE;
int e = Integer.MAX_VALUE;

看看会发生什么。