我有一个链表实现程序,其中我正在比较两个 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
值的测试与比较对象不同,因为您比较的是基元类型而不是对象类型