在下面的列表中有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);
}
}
}
}
}
如何在不重写相等方法的情况下进行比较?
谢谢!
答案 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方法。