比较java中的double值会给出奇怪的答案

时间:2015-01-02 04:55:58

标签: java linked-list

我有一个链表实现程序,我在其中比较两个Object值。 List可以具有任何类型的Object值。然后我有一个删除重复的功能。在比较双值时,它并不能确定适用于所有其他类型的位置。 以下是代码段:

//Method to remove duplicates using two pointers
public void removeDups2(){
    if(head.getNextNode() == null)
        return;

    Node currentNode = head, runnerNode;
    while(currentNode != null){
        runnerNode = currentNode;
        while(runnerNode.getNextNode() != null){
            if(runnerNode.getNextNode().getValue() == currentNode.getValue()){
                runnerNode.setNextNode(runnerNode.getNextNode().getNextNode());
                listcount--;
            }
            else{
                runnerNode = runnerNode.getNextNode();
            }
        }
        currentNode = currentNode.getNextNode();
    }
}

但是,如果我用 .equals()替换if条件,那么它就可以了。

if((runnerNode.getNextNode().getValue()).equals(currentNode.getValue())){

我尝试过以下测试:

double a = 159.25, b = 159.25;
System.out.println(a == b);

并提供 true 输出。

如果我遗漏了任何东西,请告诉我。

1 个答案:

答案 0 :(得分:0)

使用==与对象进行比较时,您不会测试它们是否等效 - 只要它们指向同一个对象。通过使用.Equals,您将测试值是否相等。您对double值的测试与比较对象不同,因为您要比较基本类型而不是对象类型