如何比较一个对象是否与另一个对象相同

时间:2018-04-08 00:35:35

标签: java

在下面的列表中有3辆卡车,我需要加上有多少是预告片。

在第一个“如果”我想要比较车辆是否与卡车类型相同但是使用'等于'时,此代码不会打印任何内容,而且确定是它应该打印3。 / p>

import java.util.ArrayList;
import java.util.Collection;

public class TesteTest {

public static void main(String[] args) {

    Collection<Vehicle> vehicles = new ArrayList<Vehicle>();
    vehicles.add(new Car());
    vehicles.add(new Car());
    vehicles.add(new Truck());
    vehicles.add(new Truck());
    vehicles.add(new Truck());

    int counter = 0;
    Truck truck = new Truck();
    for (Vehicle vehicle : vehicles) {
        System.out.println();
        if (vehicle.equals(truck)) {
            truck = (Truck) vehicle;
            if (truck.hasTruck()) {
                counter++;
                System.out.println(counter);
            }
        }
    }
}

}

如何在不重写相等方法的情况下进行比较?

谢谢!

2 个答案:

答案 0 :(得分:1)

equals方法使用对象的哈希方法进行比较。

看看这个:https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/

最简单的方法是使用instanceof operator

public static void main(String[] args) {
    List<Vehicle> vehicles = new ArrayList();
    vehicles.add(new Car());
    vehicles.add(new Car());
    vehicles.add(new Truck());
    vehicles.add(new Truck());
    vehicles.add(new Truck());

    int counter = 0;
    for (Vehicle vehicle : vehicles) {
        if (vehicle instanceof Truck) {
            counter++;
        }
    }
    System.out.println(counter);
}

答案 1 :(得分:1)

您可以尝试除instanceOf方法

之外的其他方法
Object.getClass() returns runtime type of object 

在您的代码示例中,if语句可以这种方式使用

if (vehicle.getClass() == Truck.class)

OR

if (Truck.class.isInstance(vehicle))

OR

try {
    Truck truck = (Truck) vehicle;
    // No exception: obj is of type Truck or IT MIGHT BE NULL!
   //here null value will also be type casted if present
} catch (ClassCastException e) {
}

考虑到良好的面向对象设计,应该永远不要在应用程序中使用instanceOf,getClass,isInstance方法。