對於下面的類,我知道c1.equals(c3)
返回false,因爲c1.clone()
創建指向同一對象的不同引用。但爲什麼carList1.equals(carList2)
返回true?爲什麼它不同於c1.equals(c3)
?提前謝謝了!Java clone()和equals()檢查
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();
}
}
此外,如果'Car'有一個明智的' equals()'實現,而不是依賴從Object繼承的那個,那麼'c3.equals(c1)'也是如此。 – biziclop 2014-09-12 10:08:03
但我認爲對象的克隆也是淺拷貝?另外在這裏這個問題http://stackoverflow.com/questions/1574960/java-clone-and-equality-checks,兩個數組的equals()返回false。我很困惑。 – user3735871 2014-09-12 10:09:58
@ user3735871對象的克隆是您必須實現的東西。不管它是否淺薄都沒關係,因爲你並不是重寫equals方法。 – Eran 2014-09-12 10:12:51