编辑:有人说这可能是一个问题的副本,询问如何比较字符串值。我问的是将double与int进行比较,这就是.equal()无效的原因。
首先,我用第一个元素= -999
设置了一个双打的LinkedList然后如果比较是
return listOfNumber.getFirst().equals(-999);
结果将是错误的。
但是,如果比较写为
return listOfNumber.getFirst()== -999;
然后结果将是真的。
我认为.equals()比较值和==比较对象和==只能取-128到127.那么为什么我不能使用.equals来比较双打?
此外,如果LinkedList是String,第一个元素=“a” 如果我使用
return ListOfString.getFirst() == "a";
然后结果是错误的 但如果我使用
return ListOfString.getFirst().equals("a");
然后结果是真的。
我很困惑为什么double和string的比较需要不同才能产生正确的结果?
答案 0 :(得分:4)
您的问题是由Java中的自动装箱引起的。
假设(如你所说listOfNumber
是Double的列表):
ArrayList<Double> listOfNumber = new ArrayList<>();
listOfNumber.add(-999);
由于Java知道... add(T)
的签名是... add(Double)
,因此您的add语句将转换为:
listOfNumber.add(Double.valueOf(-999));
执行时
return listOfNumber.getFirst().equals(-999);
Java知道Object.equals
接受Object
,而-999符合整数(数字的默认类型),因此它将其转换为:
return listOfNumber.getFirst().equals(Integer.valueOf(-999));
由于Integer和Double不相同,它返回false,但对于==
情况,java编译器变得更聪明,并且知道(double)-999 == (integer)-999