比较 java 中的双精度值给出了奇怪的答案



我有一个链表实现程序,其中我正在比较两个 Object 值。列表可以具有任何类型的对象值。然后我有一个删除重复项的功能。在比较双精度值时,它不会给出 true 的位置,因为它适用于所有其他类型的。以下是代码片段:

//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();
    }
}

但是,如果我将 if 条件替换为 .equals(),那么它可以工作。

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

我尝试在下面进行测试:

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

它提供了真正的输出。

如果我遗漏了什么,请告诉我。

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

相关内容

  • 没有找到相关文章

最新更新