ホームページ  >  記事  >  Java  >  Java における最終性と不変性の比較

Java における最終性と不変性の比較

WBOY
WBOY転載
2023-08-26 21:37:051227ブラウズ

Java における最終性と不変性の比較

Java の "final" キーワードは、定数値を定義し、変数、メソッド、またはクラスが変更または上書きされるのを防ぐために使用できます。一方、不変性は、その存在全体を通じて一定の状態を保つオブジェクトの特性を表します。オブジェクトが形成されると、その値は変わりません。

変数、メソッド、クラスは「final」キーワードによって制限されますが、不変性はさらに一歩進んで、オブジェクトの状態全体が確実に保持されます。

この記事では、final と immutable の主な違いを理解しましょう。

Java 最終バージョン

Java の最後のキーワードにはいくつかの特徴があります:

  • 最後の変数: 初期値は初期化後に変更できません。これらは、変更不可能または不変の値を宣言するためによく使用されます。

  • 最終メソッド: サブクラスによって変更できないため、一貫した動作が保証されます。これらは重要な手順の有効性を維持するのに役立ちます。

  • 最終クラス: 他のクラスによって拡張することはできず、その実装は変更されないことが保証されています。最終クラスは、セキュリティ クラスやユーティリティ クラスを構築するためによく使用されます。

  • 初期化: 最終変数が既知の値を持つようにするには、宣言中またはコンストラクター内で値を割り当てる必要があります。

  • パフォーマンス: Final を使用すると、コンパイラーがコードをより適切に最適化できるようになり、パフォーマンスが向上する可能性があります。

  • セキュリティ: Final は、機密データや動作に対する不正な変更を防止することにより、Java プログラムのセキュリティを向上させます。

Java における不変性

Java では、不変クラスとは、一度作成すると内容を変更できないクラスを指します。不変クラスを作成するには、次の要件に従ってください:

  • 継承を防ぐために、クラスを Final として宣言します。

  • クラスのデータ メンバーをプライベートとして宣言して、直接アクセスを制限します。

  • オブジェクトの作成後に変更されないように、データ メンバーを Final として宣言します。

  • パラメータ化されたコンストラクターを使用してディープ コピーを通じてすべてのフィールドを初期化し、オブジェクト参照による変更を防ぎます。

  • 不変性を維持するために、実際のオブジェクト参照の代わりにゲッター メソッドでオブジェクトのコピー (ディープ コピー) を返します。

これらのプロパティに従って、Integer、Boolean、Byte、Short、String などの組み込みの不変クラスと同様に、Java で独自の不変クラスを作成できます。

final と immutable の違い

Java プログラミングに関しては、「final」と「immutable」の違いを理解することが重要です。

  • 最終: オブジェクト参照を保持し、状態の変更を許可します

    「最終」から始めましょう。 Java でオブジェクトまたは変数が「final」とマークされている場合、値を指定した後で参照を別のオブジェクトまたは変数を指すように変更できないことを意味します。参照は固定されていますが、関連付けられた setter メソッドを使用するとオブジェクトの状態を変更できることに留意することが重要です。したがって、参照自体は変更できませんが、アクセス可能なメソッドを使用してオブジェクトの内部プロパティを変更することができます。言い換えれば、final はオブジェクト参照の安定性を確保しながら、その内部状態の変更を許可します。

  • 不変性: 不変の値と参照の柔軟性

    次に、「不変性」に注目してみましょう。 Java では、不変性とは、オブジェクトの実際の値が作成後に変更できないことを意味します。ただし、Final とは異なり、参照自体を変更して別のオブジェクトまたは変数に割り当てることができます。これは、オブジェクトの値は同じままですが、その参照を変更して別のインスタンスを指すようにできることを意味します。

  • アプリケーションとスコープ: Final と不変性

    修飾子「final」は、オブジェクトではなく Java の変数に適用されます。これは、オブジェクトの状態の変更を許可しながら、参照や変数の変更に対する制限を強調します。一方、不変性はオブジェクトに適用され、オブジェクトの値は一度作成されると変更できないことを示します。 Java プログラムが期待どおりに動作するようにするには、これら 2 つの概念の違いを理解することが重要です。

  • 意味: オブジェクトのアドレスと状態の変動性

    オブジェクトまたは変数をfinalとして宣言すると、そのアドレスの永続性が強制されます。言い換えれば、参照は固定されたままとなり、それが指す場所が変更されることはありません。対照的に、不変性は、オブジェクトが作成されるとその状態を変更できないことを強調します。これは、オブジェクトの内部値を変更できないことを意味し、プログラムの実行全体を通じてその整合性と一貫性が維持されます。

StringerBuffer()

このコードは、Java における "final" キーワードと不変性の違いを示しています。 「final」キーワードは変数を定数にして再代入を防ぎますが、不変性はオブジェクト自体を変更できないことを意味します。

###アルゴリズム###

    ステップ 1: 変数「sb」を、初期値「Hello」を持つ最終 StringBuffer オブジェクトとして宣言します。
  • ステップ 2: append() メソッドを使用して、「sb」によって参照される StringBuffer オブジェクトに「TP」を追加します。
  • ステップ 3: 「sb」の更新された値、つまり「HelloTP」を出力します。
  • ステップ 4: 新しい StringBuffer オブジェクトを変数 "sb" に再割り当てしようとすると、コンパイル時エラーが発生します。

  • ステップ 5: 「sb」の値を出力しますが、前のステップのエラーのため、この行は実行されません。

###例### リーリー ###出力### リーリー ###結論は###

要約すると、Java では「ファイナリティ」と不変性は非常に異なる特性を持っています。 「final」キーワードはオブジェクト参照の再割り当てを制限しますが、オブジェクトの状態の変更は許可します。

対照的に、不変性はオブジェクトの値の変更を防ぎますが、参照の再割り当ては可能です。 「final」および不変性のアプリケーションと範囲を理解することは、信頼性の高い Java プログラムを設計するために重要です。オブジェクトまたは変数が Final として宣言されると、そのアドレスは固定されたままになりますが、不変性によりオブジェクトの内部値は変更できなくなります。サンプル コードは違いを示しています。「final」により再割り当てが妨げられ、コンパイル時エラーが発生します。

以上がJava における最終性と不変性の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。