Tôi đang cố gắng tái tạo lỗi bằng cách sử dụng cùng một phiên bản SimpleDateFormat trên nhiều luồng. Tuy nhiên, tôi gặp phải một vấn đề khác và không tìm thấy câu trả lời nào.
Khối mã đơn giản này tái hiện vấn đề tôi đang gặp phải.
DateFormat d1 = SimpleDateFormat mới ("ddMMyyyy");
DateFormat d2 = SimpleDateFormat mới("ddMMyyyy");
DateFormat d3 = SimpleDateFormat mới("ddMMyy");
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
Kết quả của thao tác này trong java 7 (1.7_0_21) như sau
d1 = java.text.SimpleDateFormat@c5bfbc60
d2 = java.text.SimpleDateFormat@c5bfbc60
d3 = java.text.SimpleDateFormat@b049fd40
Như bạn có thể thấy, mặc dù tôi tạo các đối tượng mới cho d1 và d2 nhưng cuối cùng chúng vẫn có cùng một tham chiếu. Vì lược đồ khác nhau nên d3 cuối cùng trở thành một phiên bản mới.
Java có thực hiện tối ưu hóa này khi biên dịch/chạy không? Mọi gợi ý sẽ hữu ích
Định dạng ngày đơn giản
Và Định dạng ngày
(Định dạng ngày đơn giản
siêu hạng) và Định dạng
(Định dạng ngày
Super class) đều được thực hiện toString()
, vì vậy thực sự đang thực hiện Object
trong lớp toString()
, mã của nó là:
Chuỗi công khai toString() {
trả về getClass().getName() + "@" + Integer.toHexString(hashCode());
}
现在,Định dạng ngày đơn giản
hashCode được tạo:
mã băm int công khai()
{
trả về mẫu.hashCode();
// vừa đủ trường để phân bổ hợp lý
}
Điều này có nghĩa là nếu bạn tạo nhiềungười mẫu
củaĐịnh dạng ngày đơn giản
trường hợp (như trong trường hợp của bạn), họ sẽ cónhư nhaumã băm
,Vì vậytoString()
Giá trị tương tự sẽ được trả về cho các trường hợp này.
Hơn nữa, như Rixmath đã phát hiện ra, với cùng một mẫu
của Định dạng ngày đơn giản
Các trường hợp cũng sẽ bằng nhau.
Tôi là một lập trình viên xuất sắc, rất giỏi!