gpt4 book ai didi

Java clone() 和 equals() 检查

转载 作者:搜寻专家 更新时间:2023-11-01 02:08:09 25 4
gpt4 key购买 nike

对于下面的类,我了解到 c1.equals(c3) 返回 false,因为 c1.clone() 创建了指向同一对象的不同引用。但为什么 carList1.equals(carList2) 返回 true?为什么它与 c1.equals(c3) 不同?非常感谢!

class Car implements Cloneable {
private String plate;
private double maxSpeed;
public Car(String lp, double max) {
license = lp;
maxSpeed = max;
}
public static void main(String[] args) throws Exception{
Car c1 = new Car("ABC123", 150.0);
Car c2 = new Car("ABC123", 150.0);
Car c3 = (Car) c1.clone();
ArrayList<Car> carList1 = new ArrayList<Car>();
carList1.add(c1);
carList1.add(c2);
ArrayList carList2 = (ArrayList) carList1.clone();
}
}

最佳答案

ArrayList

clone 执行浅拷贝,即它不克隆 ArratList 中包含的元素,它只是复制引用。这就是 equals 返回 true 的原因,因为它不比较 ArrayList 对象的引用,而是比较列表中的元素。

public Object clone()

Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.)

public boolean equals(Object o)

Compares the specified object with this list for equality. Returns true if and only if the specified object is also a list, both lists have the same size, and all corresponding pairs of elements in the two lists are equal. (Two elements e1 and e2 are equal if (e1==null ? e2==null : e1.equals(e2)).) In other words, two lists are defined to be equal if they contain the same elements in the same order.

另一方面,假设您没有重写它的 equals 方法来比较成员,Car 使用 Object::equals 的默认实现,它比较对象引用,因此克隆的汽车不等于原始汽车。

关于Java clone() 和 equals() 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com