質問: 0; i < 10; i++) { System.out.println(ExerciseSingleton.getInstance()); } } } ``` ### 補足情報(言語/FW/ツール等のバージョンなど) java1.6 eclipse mars
回答: 1. 表示されてる値は、ObjectのtoStringの結果です。 ぶっちゃけ、あまり気にしなくてよいです。 2. maisumakunさんの説明通り。`new` したものを宣言していないので`null`です。 3. 認識はあっています。double-checked locking というイディオムですが、javaでは推奨されません 4. `volatile`は気にしなくてよいです。 5. コンストラクタを`private`にしているため、他のクラスから`new`できないようにしています。 多少の間違い恐れずに言うなら、要はnewの代わりです。 6. double-checked locking というイディオムですが、javaでは推奨されません Javaのシングルトンについては、以下が詳しいので目を通すことをおすすめします。 古いので、いまとはJVMの仕様・実装が異なる可能性あるかもですが、どなたかツッコミお待ちしてます。 IBM Developerworks:double-checked lockingとSingletonパターン 要約 > > プログラマーたちは、Singletonで高コストな同期化を回避するために、工夫を凝らして、double-checked lockingイディオムを考案しました。残念ながら、このイディオムが、現行のメモリー・モデルが原因で安全なプログラミング構成概念ではないことが明らかになったのは、これがかなり広く使われるようになった後のことでした。メモリー・モデルの、ぜい弱な部分を改良するための努力が行われています。しかし、新しく提案されたメモリー・モデルでも、double-checked lockingは通用しません。この問題に対する最良の解決策は、同期化を受け入れるか、あるいはstatic field を使用することです。 > > >