gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:08:22 26 4
gpt4 key购买 nike

我有以下 Java 代码行:

public class myProjects {

public static void main(String[] args) {
// TODO Auto-generated method stub
Integer d = Integer.MAX_VALUE;
Integer e = Integer.MAX_VALUE;
System.out.println(d);
System.out.println(e);
if(d == e){
System.out.println("They are equal\n");

}else {
System.out.println("They are not equal\n");
}
}

}

Output:
2147483647
2147483647
They are not equal

为什么它们具有相同的值但不相等?

最佳答案

Integer.MAX_VALUE 返回一个 int。当执行 Integer d = Integer.MAX_VALUE; 时,它通过 Integer.valueOfint 装箱为 Integer

由于默认情况下缓存来自 [-128, 127] valueOf 将为每次调用返回新实例。因此它们不是相同的引用。

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

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

关于java - 为什么在java中比较两个整数MAX_VALUE会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com