Tôi đã cố gắng sao chép một lỗi bằng cách sử dụng cùng một cá thể của SimpleDateFormat trên nhiều luồng. Tuy nhiên tôi đã bị mắc kẹt với một vấn đề khác và không tìm thấy bất kỳ câu trả lời cho nó.SimpleDateFormat mới luôn trả về cùng một tham chiếu cho một dateFormat
Khối mã đơn giản này sao chép các vấn đề tôi thấy.
DateFormat d1 = new SimpleDateFormat("ddMMyyyy");
DateFormat d2 = new SimpleDateFormat("ddMMyyyy");
DateFormat d3 = new SimpleDateFormat("ddMMyy");
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
Kết quả của hoạt động này dưới java 7 (1.7_0_21) là như sau
d1 = [email protected]
d2 = [email protected]
d3 = [email protected]
Như bạn có thể thấy rằng mặc dù tôi đang tạo ra các đối tượng mới cho d2 d1 và họ kết thúc là cùng tài liệu tham khảo. d3 kết thúc là một thể hiện mới vì mô hình là khác nhau.
Trình biên dịch/thời gian chạy java có thực hiện tối ưu hóa này không? Bất kỳ con trỏ sẽ rất hữu ích
Chúng thực sự là cùng một cá thể (với '==')? – assylias
Và để trả lời câu hỏi cuối cùng: không, một 'mới' trong Java sẽ ** luôn luôn ** dẫn đến một đối tượng mới (trừ khi nó dẫn đến một ngoại lệ). JVM không được phép tối ưu hóa điều đó. –