比较两个对象是否等于:

时间:2018-02-12 12:42:44

标签: java

我有一个列表,其中包含两个Box个不同的对象(它们在id,地址,数量上有所不同),我需要获取列表中最后一项的索引{{1但我总是得到两个对象是平等的 最后一个对象的索引是1而不是0

为什么两个对象都相同,以及如何获取列表中最后一个框的索引?我错过了什么吗?

1

输出结果为:

  

## - ## boxList size:2
  ## - ##这两个框是等于
  ## - ## boxB id:1513682911061包装箱地址:DS / 1-1-1-1 / A,包装箱数量:120 x:0
  ## - ## boxB id:1513682911062包装箱地址:DS / 1-1-2-1 / A,包装箱数量:18 x:0
  ## - ## indexTemp:0

修改

System.out.println("##--## boxList size:  " + boxList.size());
if( boxList.get(0).equals(boxList.get(1))){
    System.out.println("##--## the both boxes are equals");
}

for(Box boxB: boxList){
    System.out.println("##--## boxB id: " + boxB.id + " box address: " + boxB.store.address + " ,box quantity: " + boxB.quantity + " x: " + boxList.indexOf(boxB));         
}

Box lastFirstLoop = boxList.get(1);
int indexTemp = boxList.indexOf(lastFirstLoop); 
System.out.println("##--## indexTemp: " + indexTemp );  

2 个答案:

答案 0 :(得分:0)

假设“Box”是你的自定义类,你应该看看这里: https://stackoverflow.com/a/27609/6705466

它指导如何重写equals(Object o)和hashCode()。你总是应该一起覆盖它们,每当equals返回true时,hashCode应该是相同的。

我的另一个建议是,在访问列表中的索引之前添加一点if语句(只是为了避免IndexOutOufBoundsException,可能是null检查会很好)

答案 1 :(得分:0)

First of all you need to **Override** your equals() method since **Box** is your Custom class. If you want to use .equals() method properly. Example is shown below: 

    class Box {
    /*your class body*/

    // Overriding equals() to compare two Box objects
    @Override
    public boolean equals(Object o) {
        Box box = (Box) o;
        if(id.equals(box.id)){
            return true;
        }
        return false;
    }
    }

对于indexOf()方法,您需要覆盖hashCode()方法。如下所示:

@Override
public int hashCode() {
   return Objects.hash(id);
}