Я пытался реплицировать ошибку, используя тот же экземпляр SimpleDateFormat для нескольких потоков. Однако я столкнулся с другой проблемой и не нашел на ней никаких ответов.новый SimpleDateFormat всегда возвращает ту же ссылку для данной датыFormat
Этот простой кодовый блок реплицирует проблемы, которые я вижу.
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);
Результаты этой операции под Java 7 (1.7_0_21) выглядит следующим образом
d1 = [email protected]
d2 = [email protected]
d3 = [email protected]
Как вы можете видеть, что, хотя я создаю новые объекты для Д1 и Д2 они в конечном итоге то же самое Справка. d3 заканчивается тем, что является новым экземпляром, поскольку шаблон отличается.
Выполняет ли java компиляцию/выполнение во время этой оптимизации? Все указатели будут полезны
Являются ли они на самом деле одним и тем же экземпляром (с '==')? – assylias
И ответить на последний вопрос: no, 'new' в Java всегда будет ** приводить к появлению нового объекта (если только это не приведет к исключению). JVM не позволяет оптимизировать это. –