Java
 Computer >> コンピューター >  >> プログラミング >> Java

可変オブジェクトと不変オブジェクトの違い


Javaでは、不変オブジェクトの状態は、作成後に変更することはできませんが、他のオブジェクトを確実に参照します。複数のスレッドはオブジェクトの状態を変更できないため、不変のオブジェクトはスレッドセーフであるため、マルチスレッド環境で非常に役立ちます。不変オブジェクトは、一時的な結合を回避するのに非常に役立ち、常に障害の原子性を持ちます。

一方、可変オブジェクトには変更可能なフィールドがあり、不変オブジェクトにはオブジェクトの作成後に変更できるフィールドがありません。

Sr。いいえ。 キー ミュータブルオブジェクト 不変オブジェクト
1
基本
作成後に可変オブジェクトの状態を変更できます
オブジェクトの作成後にオブジェクトの状態を変更することはできません。
2
スレッドセーフ
ミュータブルオブジェクトはスレッドセーフではありません
不変オブジェクトはスレッドセーフです。
3
最終
ミュータブルクラスは最終ではありません
不変オブジェクトを作成するには、クラスをfinalにします
4

デフォルトでは、すべてのクラスとそのオブジェクトは本質的に変更可能です。
文字列とすべてのラッパークラスは不変クラスの例です

不変クラスの例

public final class ImmutableClass {
   private String laptop;
   public String getLaptop() {
      return laptop;
   }
   public ImmutableClass(String laptop) {
      super();
      this.laptop = laptop;
   }
}
public class Main {
   public static void main(String args[]) {
      ImmutableClass immutableClass = new ImmutableClass("Dell");
      System.out.println(immutableClass.getLaptop());
   }
}

可変クラスの例

public class MuttableClass {
   private String laptop;
   public String getLaptop() {
      return laptop;
   }
   public void setLaptop(String laptop) {
      this.laptop = laptop;
   }
   public MuttableClass(String laptop) {
      super();
      this.laptop = laptop;
   }
}
public class Main {
   public static void main(String args[]) {
      MuttableClass muttableClass = new MuttableClass("Dell");
      System.out.println(muttableClass.getLaptop());
      muttableClass.setLaptop("IBM");
      System.out.println(muttableClass.getLaptop());
   }
}

  1. JavaでのComparableとComparatorの違い

    コンパレータとコンパレータはどちらも、コレクションの要素を並べ替えるために使用できるインターフェイスです。コンパレータインターフェイスはjava.utilパッケージに属し、compareratorインターフェイスはjava.langパッケージに属します。コンパレータインターフェイスは、提供された2つのオブジェクトを使用してコレクションを並べ替えますが、比較可能なインターフェイスは、「これ」が提供された1つのオブジェクトを比較します。 Sr。いいえ。 キー 比較可能 コンパレータ 1 メソッド 同等のインターフェースにはメソッドcompareTo(Object a)があり

  2. Pythonイテレータとイテレータの違い

    iterableは、組み込みメソッドiter()に渡されたときにイテレーターを生成するオブジェクトとして大まかに定義できます。オブジェクトが反復可能であるためには、いくつかの条件があります。クラスのオブジェクトは、__len__と__getitem__の2つのインスタンスメソッドを定義する必要があります。 iter()メソッドに渡されたときにこれらの条件を満たすオブジェクトは、イテレータを生成します。 反復可能な-を理解するために、以下の例を理解しましょう string = "Tutorialspoint" for char in string: print (char)