比較または新しい変数の初期化のいずれかで、どちらを使用するかによって違いはありますか?
BigDecimal.ZERO が 1.5 の機能であることは知っているので、それは懸念事項ですが、1.5 を使用していると仮定して、問題はありますか?
ありがとう。
比較または新しい変数の初期化のいずれかで、どちらを使用するかによって違いはありますか?
BigDecimal.ZERO が 1.5 の機能であることは知っているので、それは懸念事項ですが、1.5 を使用していると仮定して、問題はありますか?
ありがとう。
BigDecimal.ZERO
は事前定義された定数であるため、実行時に文字列から評価する必要はありませんBigDecimal("0")
。より高速になり、新しいオブジェクトを作成する必要がなくなります。
コードを1.5より前で実行する必要がある場合は、(非常に悪意のある)シングルトンパターンを使用して、と同等のオブジェクトを作成できますBigDecimal.ZERO
。初めて使用するときはBigDecimal("0")
、ゼロオブジェクトを作成するために呼び出し、その後の呼び出しでそのオブジェクトを返します。それ以外の場合、コードが1.5システムで実行されていると、シングルトンオブジェクトはBigDecimal.ZERO
実行時のペナルティなしで戻ることができます。
ZEROを使用しても、新しいオブジェクトが作成されたり、解析が必要になることはありません。間違いなく行く方法。
実行時のペナルティについて話す前に、このコードが重要であることを確認してください。プロファイリングを設定し、完全なユース ケースを測定します。
それにもかかわらず、Bigdecimal.ZERO
コンパイル時にチェックされるので、誤って入力することができますがnew BigDecimal("9")
、コンパイラは受け入れますが、アプリケーションにバグを引き起こす可能性があります。
好奇心から BigDecimal のコンストラクターをチェックしましたが、「0」文字列の最適化はありません。間違いなくそうです、違いがあります。