• ベストアンサー

整数0を値とするBigDecimal

のオブジェクトを作るときに BigDecimal bd=new BigDecimal(0); のようにnewを使わない方法は有るでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.2

 こんにちは。 BigDecimal bd = BigDecimal.valueOf(0);  や BigDecimal bd = BigDecimal.ZERO; (JDK1.5より)  なんて書き方もできますね。  でも、ソースコードを見ると、少なくともJDK1.5では結局、すべて同じことのようです。  newしても、結局コンストラクタの中でvalueOfを呼んでいますし、valueOfメソッドの中であらかじめ用意してあるBigDecimal.ZEROを返すことになるので、ほとんどパフォーマンスは変わらないと思います。  最終的にはBigIntegerのvalueOfメソッドに行き着きますが、-16~+16までの定数が用意されていて、その範囲内だと、そのインスタンスを使いまわし、それ以外だと、普通にnewするだけみたいです。  将来のバージョンでは、さらにインスタンスの再利用性が増すことが期待できるのではないでしょうか。

guuman
質問者

お礼

詳しい説明ありがとうございます

その他の回答 (1)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 う~ん、ファクトリや、値0を意味する暗黙のインスタンスのようなものは無いか、って事よね。  私の知る限りでは、そんなものは存在しないと思う。結局どんなデザインパターンを使ったとしても、どこかでnewされてる事には変わりないし。  そもそもJavaにはこーゆー理念は無いのではないかね。一人だけ+演算子が使えるなど特別待遇されているStringクラスも、ソースを見ると裏で結構色んな事がなされて実現されている。あんな苦労するんだったら最初から演算子のオーバーロード実装してくれりゃ良いのにと思わなくもない。余談が長くなってしまった。

guuman
質問者

お礼

ありがとうございます intのようには扱えないのですね

関連するQ&A