【问题标题】:Comparing double values in java gives odd answer比较java中的double值给出了奇怪的答案
【发布时间】:2015-01-02 04:55:57
【问题描述】:

我有一个链表实现程序,我在其中比较两个 Object 值。 List 可以有任何类型的 Object 值。然后我有一个删除重复项的功能。在比较双精度值时,它并没有给出正确的位置,因为它适用于所有其他类型。 这是代码sn-p:

//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 输出。

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

【问题讨论】:

    标签: java linked-list


    【解决方案1】:

    当使用== 与对象进行比较时,您并不是在测试它们是否相等——只要它们指向同一个对象。通过使用.Equals,您正在测试这些值是否相等。您对double 值的测试与比较对象不同,因为您是在比较原始类型而不是对象类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2012-04-17
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多