1

Stringオブジェクト内の変数に数値を保持し(メソッドを渡し、文字列として返す)、後でそれを変換しBigDecimalて操作するだけで操作するのは良い考えですか?

メソッド シグネチャと pojo で使用する意図は、操作をdouble実装者が好むその他のタイプで実行できることです。

例えば

public String operate(String value1, String value2){
    BigDecimal val1 = new BigDecimal(value1);
    BigDecimal val2 = new BigDecimal(value2);
    return val1.multiply(val2).toString();
}

それとも単なるオーバーヘッドですか?

パフォーマンスに影響しますか?

4

4 に答える 4

2

ある形式から別の形式への変換は、常にオーバーヘッドになります。すべての操作を実行できる形式で保存します

于 2013-04-23T10:52:40.700 に答える
1

次の 2 つの観点から、これは悪い考えです。

  1. すべての操作で、文字列表現との間の変換が必要になります
  2. メモリのオーバーヘッドは膨大です。

この例を考えてみましょう。通常intは、メモリ内で 4 バイトを占有します。intとして表される は、最大String72 バイトを占めることができます。

  • 16 バイト -- オブジェクトのオーバーヘッド、
  • 4 バイト -- キャッシュされたハッシュ コード
  • 8 バイト -- char 配列への参照
  • 24 + 2 * 10 バイト -- char 配列自体 (最大 10 桁)
  • パディング用に最大 8 バイト

のプリミティブ表現の 18 (!) 倍intです。

于 2013-04-23T11:03:38.763 に答える
1

なぜそれが良い考えなのかわからない。「Stringly Typed」はあまり良いことではありません。はい、BigDecimal はバイト配列としてよりコンパクトな数値を保持し、long値に小さな値を保持するように最適化します。文字列は、2 バイト文字の 10 進数表現になります。

于 2013-04-23T10:55:09.930 に答える
0

これを行うには多くの問題があります。まず、余分なオブジェクトを作成および破棄するオーバーヘッドがあり、少なくとも 1 つは String との間の変換が行われます。これが発生する回数によっては、重大な問題になる可能性があります。第 2 に、文字列から数値への変換、およびその逆の変換を行うたびに、解析の問題などのリスクが生じます。最後に、型キャストなどに関して Java が提供する組み込みのチェック アンド バランスを回避します。

私の個人的な意見では、可能な限り変換を最小限に抑え、データをできるだけ具体的なオブジェクト/プリミティブに保存する必要があります。これにより、コードが読みやすく、保守しやすく、バグが発生した場合のトラブルシューティングが容易になると思います。

于 2013-04-23T10:55:25.153 に答える