-1

重複の可能性:
可変オブジェクトと不変オブジェクト

不変オブジェクトと可変オブジェクトの長所と短所は理解していますが、設計する際にどちらを選択するかをどのように決定しますか。

私がそれについて尋ねる理由は、それが可変である場合、効率的かつ経済的な方法でオブジェクトを初期状態に戻すだけでオブジェクトを再利用できるためです。したがって、マルチステップ操作を処理するときは、オブジェクトを再利用するだけで済みます。もう一度。一方、マルチステップ操作を実行すると、すべてのステップで新しいオブジェクトが生成されるため、不変オブジェクトのパフォーマンスが向上します。<-メモリに関する限り

次に例を示します。

   //Mutable
   A a = new A();
   for(int j = 0 ; j < 1000 ; j++){
       a.setP1(j);
       //do something

   }

   //Immutable
   for(int j = 0 ; j < 1000 ; j++){
       A a = new A(j);
       //do something
   }

不変オブジェクトは、広告に対して安全で、同期は不要で、シンプルで、内部を共有していることを知っていますが、これら以外に特別な理由はありますか?そして、いつクラスを最終(不変)にする必要がありますか?

4

2 に答える 2

1

可変性の理由は、基本的にオブジェクトのプーリングと作成のためです。これは、作成に非常にコストがかかる、またはインスタンスの数を厳密に制御する必要がある (db 接続やスレッド プールなど) 特別な理由がない限り、オブジェクトを変更可能にする理由にはなりません。

これは、Java の初期に使用された手法であり、現在では嫌われています。VM とガベージ コレクターにその仕事をさせ、そのユース ケースに合わせてコードを設計し、通常はこの「架空の」最適化を無視します。

于 2012-06-07T19:29:10.367 に答える
0

次の場合に不変オブジェクトを使用します。

  1. マルチスレッド環境で作業する場合、不変オブジェクトはスレッド間通信 (メッセージ) に最適です
  2. オブジェクトが、そのメンバー変数がアプリケーションのライフサイクルにわたって変化しない状態を保持していない場合。例、ユーザー資格情報
于 2012-06-07T18:57:38.157 に答える