gpt4 book ai didi

java - 在java中等于和==行为

转载 作者:行者123 更新时间:2023-12-03 23:09:57 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Java: Integer equals vs. ==

(7 个回答)


7年前关闭。




请您解释以下行为。

public class EqAndRef {

public static void main(String[] args) {
Integer i = 10;
Integer j = 10;

Double a = 10D;
Double b = 10D;

System.out.println(i.equals(j));
System.out.println(i == j);


System.out.println(a.equals(b));
System.out.println(a == b);


}
}

jdk 6 上的输出
true
true
true
false

为什么 a==b 是假的,而 i==j 不是假的?

最佳答案

Integer s ij由从 –128 到 127 范围内的整数文字构造(通过自动装箱),因此保证被 JVM 池化,因此相同的对象(参见 flyweight pattern)用于它们。因此,它们通过对象引用进行比较。

对于 Double s ab另一方面,不存在这样的池化保证,在您的情况下,您得到了两个不同的对象,但它们的比较并不相同。

使用 ==如果您不打算检查身份,则比较对象将被视为可疑,应避免。 equals这两种类型的方法都被覆盖以比较装箱值(而不是对象标识),这就是它们返回 true 的原因。在这两种情况下(并且应该使用)。

关于java - 在java中等于和==行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081037/

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