我在Java中有以下几行代码:
<div ng-if="someCondition"> </div>
为什么即使它们具有相同的值,它们也不相等?
答案 0 :(得分:2)
Integer.MAX_VALUE
会返回int
。在执行Integer d = Integer.MAX_VALUE;
时,它会int
通过Integer
将Integer.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)
简单地说,Integer
是Object
而不是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;
看看会发生什么。