【问题标题】:2 same values compared doesnt equals true Java比较的 2 个相同的值不等于真正的 Java
【发布时间】:2022-09-27 20:21:18
【问题描述】:
int num1= finalOrder.get(129);
int num2= q.get(127);
                
System.out.println((finalOrder.get(129))==(q.get(127)));
System.out.println(finalOrder.get(129));
System.out.println(q.get(127));
System.out.println(num1==num2);

这是简单的java

这是输出

false
130
130
true

当我将数字放入 int 时,第一个打印如何等于 false 而它是 true?

标签: java boolean


【解决方案1】:

假设finalOrderqMap<?, Integer>,然后将它们分配给原始int 将拆箱它们。 == 适用于原语(int、boolean、double、long 等)。它通常不会像预期的那样对引用类型(Object、Integer、Boolean、Double、Long 等)起作用,因为将比较对象的内存地址。

因此,您需要将 == 替换为 Objects.equals(a, b) 以使其适用于所有 Integer 引用。

更复杂的是,Integer 类保留了从 -128 到 127 的整数引用缓存,因此 Integer.valueOf(1) == Integer.valueOf(1) 仍然为真,但 Integer.valueOf(130) == Integer.valueOf(130) 为假。此外,new Integer(1) == new Integer(1) 也将返回 false,因为缓存不能从构造函数中使用,只能从工厂方法中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2020-12-16
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多