【问题标题】:Comparison of int to Integer not working after adding to Linkedlist [duplicate]添加到Linkedlist后,int与Integer的比较不起作用[重复]
【发布时间】:2020-04-11 10:23:26
【问题描述】:
public static void main(String[] args) {
     int var = 128;
     Integer i = var;
     int j = var;
     LinkedList<Integer> ll = new LinkedList<>();
     ll.add(var);
     System.out.println(i==j);
     System.out.println(i==ll.peek()); 
 }
Output:
true
false

128 以下的变量 var 的值给出了正确的输出:

Output:
true
true

请解释为什么 peek() 对大于 127 的值进行比较失败?

【问题讨论】:

  • 您没有将 int 与 Integer 进行比较。您正在将一个整数与另一个整数进行比较。所以你应该使用equals 而不是==
  • 我认为你应该阅读this问题,你会得到部分答案。

标签: java linked-list int integer


【解决方案1】:

按如下方式进行:

System.out.println(i.equals(ll.peek()));

请记住,== 比较的是引用,而不是内容。

检查Why is 128==128 false but 127==127 is true when comparing Integer wrappers in Java? 以了解为什么它返回true 的数字小于128

【讨论】:

  • 如果比较参考文献, == 怎么会起作用?
  • @JunisvaultCo - 你的意思是i==j 如何返回true?如果是,那是因为Autoboxing and Unboxing
  • 他说 i==ll.peek() 对于 var
  • @JunisvaultCo 看看this
  • @michalk 谢谢!太疯狂了
【解决方案2】:

这是因为整数常量池。 Java维护从-128到127的整数池

private static class IntegerCache {
        static final int low = -128;
        static final int high;  //set to 127
}

因此,对于 -128 到 127 之间的值,将从缓存返回相同的引用,但对于其他值,将创建新的 Integer 对象。

【讨论】:

    【解决方案3】:

    运算符== 检查引用是否相等。 因为Integer i是一个Class类型,还有ll.peak()的返回值,你应该使用equals()方法来比较它们。

    【讨论】:

      猜你喜欢
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 2018-06-24
      • 2014-07-19
      相关资源
      最近更新 更多