将Java中的double类型与-=和.equals()进行比较

时间:2018-04-14 18:56:48

标签: java

编辑:有人说这可能是一个问题的副本,询问如何比较字符串值。我问的是将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的比较需要不同才能产生正确的结果?

1 个答案:

答案 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