gpt4 book ai didi

java - Java 的不一致行为 ==

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:58 25 4
gpt4 key购买 nike

考虑这段代码:

class test {
public static void main(String[] args) {
test inst_test = new test();
int i1 = 2000;
int i2 = 2000;
int i3 = 2;
int i4 = 2;
Integer Ithree = new Integer(2); // 1
Integer Ifour = new Integer(2); // 2
System.out.println( Ithree == Ifour );
inst_test.method( i3 , i4 );
inst_test.method( i1 , i2 );
}
public void method( Integer i , Integer eye ) {
System.out.println(i == eye );
}
}

它打印:

false
true
false

我理解第一个 false,== 运算符只检查两个引用是否在同一个对象上工作,在这种情况下不是。

下面的 truefalse 让我摸不着头脑。为什么 Java 认为 i3i4 相等,而 i1i2 不同?两者都已包装为 Integer,难道 both 的计算结果不应该为 false 吗?这种不一致是否有实际原因?

最佳答案

将基元自动装箱为对象(在调用方法时使用的是小值缓存。来自Java Language Specification section 5.1.7:

If the value p being boxed is true, false, a byte, a char in the range \u0000 to \u007f, or an int or short number between -128 and 127, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

紧随其后的规范讨论部分也很有趣。值得注意的是,JVM 可以根据需要缓存更多 值 - 您无法确定这样做的结果:

Integer i1 = 129;
Integer i2 = 129;
boolean b = (i1 == i2);

关于java - Java 的不一致行为 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1148805/

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