У меня установлена 64-разрядная операционная система Windows 7 Professional, и я работаю с JDK 7.
У меня есть класс Employee, который поддерживает копирование с помощью конструктора:
public class Employee {
private int id;
private String name;
private java.util.Date hireDate;
public Employee() {
}
public Employee(Employee e) {
this.id = e.id;
this.name = e.name;
this.hireDate = e.hireDate;
}
// getters and setters
}
Для первого тестированияЯ создаю объект employee1:
Employee employee1 = new Employee();
employee1.setId(1);
employee1.setName("John");
employee1.setHireDate(new GregorianCalendar(2018, Calendar.DECEMBER, 19).getTime());
Затем я клонирую его в объект employee2;
Employee employee2 = new Employee(employee1);
Теперь мне сказали, что только примитивы и неизменяемые объекты не нуждаются в глубоком копировании, и поскольку java.util.Date
не является ни примитивным, ни неизменным, поэтому я подумал, что это будет действовать как копирование ссылок, поэтому, если я изменю его в одном объекте, это также автоматически изменится во втором объекте.
Таким образом, я изменяю это во 2-м объекте:
employee2.setHireDate(new GregorianCalendar(2017, Calendar.FEBRUARY, 5).getTime())
, но когда я печатаю их обоих:
System.out.println("employee1.getHireDate()=" + employee1.getHireDate());
System.out.println("employee2.getHireDate()=" + employee2.getHireDate());
Я видел 2 разные даты.Что я понял неправильно?