ホームページ > Java > &#&チュートリアル > Java の可変性と不変性: 2 つの違いを理解する。

Java の可変性と不変性: 2 つの違いを理解する。

Mary-Kate Olsen
リリース: 2024-11-15 12:50:03
オリジナル
273 人が閲覧しました

Java の不変性と可変性を理解することは、特にデータの整合性とスレッドの安全性を考慮する場合、効果的なプログラミングに不可欠です。この概念の概要は、完全な理解を得るのに役立ちます。

不変性とは何ですか?

不変オブジェクトとは、作成後に状態を変更できないオブジェクトです。これは、不変オブジェクトがインスタンス化されると、そのデータ フィールドを変更できないことを意味します。 Java における不変クラスの一般的な例は String クラスです。

不変オブジェクトの主な特徴:

  • 最終フィールド: すべてのフィールドは最終フィールドとして宣言されます。つまり、割り当てられるのは 1 回だけです。
  • セッターなし: 不変クラスは、状態を変更できるセッター メソッドを提供しません。
  • 防御コピー: クラスに変更可能なオブジェクトが含まれている場合、不変性を確保するために、参照ではなくコピーを返す必要があります。

不変クラスの例

public final class ImmutablePoint {
    private final int x;
    private final int y;

    public ImmutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }
}
ログイン後にコピー

この例では、ImmutablePoint は作成後に変更できません。 x 座標と y 座標はコンストラクターを介してのみ設定でき、セッターは提供されません。

可変性とは何ですか?

対照的に、可変オブジェクトは作成後に状態を変更できます。これは、そのプロパティやフィールドをいつでも変更できることを意味します。

可変オブジェクトの主な特徴:

  • 非最終フィールド: フィールドは最終フィールドとして宣言されていないため、変更が可能です。
  • 利用可能なセッター: 可変クラスは通常、オブジェクトの状態を変更するためのセッター メソッドを提供します。

可変クラスの例

public class MutablePoint {
    private int x;
    private int y;

    public MutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }
}
ログイン後にコピー

MutablePoint クラスでは、提供された setter メソッドを使用して x と y の値を変更できます。

不変性と可変性の比較

Java mutability and immutability: Understanding the difference between the two.

結論
可変オブジェクトと不変オブジェクトのどちらを選択するかは、アプリケーションの要件によって異なります。不変オブジェクトは同時環境での簡素化や安全性などの利点をもたらし、一方、可変オブジェクトは不必要なオブジェクトの作成を回避することでパフォーマンス上の利点をもたらします。これらの概念を理解すると、堅牢で保守しやすい、より優れた Java アプリケーションを設計するのに役立ちます。

以上がJava の可変性と不変性: 2 つの違いを理解する。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート