複数のスレッドにわたって同じインスタンスのSimpleDateFormatを使用してバグを複製しようとしていました。しかし、私は別の問題を抱えていて、何の答えも見つけられませんでした。新しいSimpleDateFormatは、指定されたdateFormatの同じ参照を常に返します
この単純なコードブロックは、私が見ている問題を再現します。
d1 = [email protected]
d2 = [email protected]
d3 = [email protected]
を次のようにあなたは私がD1およびD2のための新しいオブジェクトを作成しておりますが、彼らは同じになってしまうことを見ることができるように
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)の下で、この操作の結果は、参照。パターンが異なるので、d3は新しいインスタンスになります。
Javaコンパイル/ランタイムはこの最適化を行いますか?任意のポインタは
実際には( '=='を使って)同じインスタンスですか? – assylias
そして、最後の質問に答える:いいえ、Javaの 'new' **は常に**例外を発生させない限り、新しいオブジェクトを生成します**。 JVMは、それを最適化することはできません。 –