0

あるインタビュアーから、クラスを不変にすることのデメリットについて尋ねられました。不変オブジェクトが占有するヒープ領域と、それが Java アプリケーションのパフォーマンスをどのように低下​​させるかについて回答しました。

Javaでオブジェクトを不変にすることの他の欠点は何ですか?

4

4 に答える 4

1

欠点は、「値」を変更するために新しいオブジェクトを作成する必要があることです。クラスが頻繁に「変更」されるものを表している場合、大量のオブジェクトを作成し、ガベージ コレクターに負荷をかけます。

于 2013-03-05T17:01:22.863 に答える
0

BigIntegerを取りましょう

BigInteger i1 = BigInteger.valueOf(1);

addメソッドがありますが、1を追加することはできません。不変なので、次のようになります。

BigInteger i2 = i1.add(i1);

つまり、毎回新しいオブジェクトが作成されます。つまり、不変のBigIntegerを使用した演算は非常に低速です。

于 2013-03-05T17:10:10.640 に答える
0

また、不変オブジェクトをデシリアライズ/マテリアライズすることは、通常、パラメーターのないコンストラクターを使用せずにクラスを作成する必要があるため、はるかに困難になる可能性があることも考慮する必要があります。

于 2013-03-05T17:08:57.230 に答える
-1

オブジェクトが変更可能であるというアプリケーション要件がない場合は、オブジェクトを変更不可にしても不利益はないので、変更する必要があります。

オブジェクトが変更可能であるというアプリケーション要件がある場合は、オブジェクトを変更可能にします。

于 2013-03-05T16:59:43.740 に答える