検索

可変オブジェクトには変更可能なフィールドがあります。不変オブジェクトには、オブジェクトの作成後に変更できるフィールドがありません。不変オブジェクトは、作成後に状態が変更できないオブジェクトです。 Mutable と Immutable は、Java のオブジェクトの 2 つのカテゴリです。この記事では、Java における可変オブジェクトと不変オブジェクトの違いについて説明します。また、Java の可変クラスと不変クラスの違いを示す Java コード例も示します。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

可変 Java と不変 Java の直接比較 (インフォグラフィックス)

以下は、可変 Java と不変 Java のトップ 6 の違いです:

可変 Java と不変 Java

可変 Java と不変 Java の主な違い

Java の可変オブジェクトと不変オブジェクトの主な違いは次のとおりです。

  • 可変オブジェクトとは、新しいオブジェクトを作成せずにオブジェクトの状態を変更できるオブジェクトです。つまり、可変オブジェクトは作成後に変更できます。不変オブジェクトの場合、オブジェクトの状態が変更されるたびに、新しいオブジェクトが取得されます。不変オブジェクトを扱う場合、オブジェクトの作成後にその状態を変更することはできません。
  • 一般に、可変オブジェクトはオブジェクトの内容を変更できるメソッドを提供しますが、不変オブジェクトはその内容を変更するためのメソッドを提供しません。
  • 可変 Java クラスにはゲッター メソッドとセッター メソッドが存在しますが、不変クラスではゲッター メソッドのみが使用可能で、セッター メソッドは使用できません。
  • 可変クラスはスレッドセーフである場合とそうでない場合がありますが、不変クラスはデフォルトでスレッドセーフです。
  • Java の変更可能なクラスの例は、java.util.Date、StringBuffer、StringBuilder などです。一方、Java のレガシー クラス、ラッパー クラス、String クラスは、Java の不変クラスの例です。

可変 Java と不変 Java の比較表

可変 Java と不変 Java の主な比較について説明します。

変更可能

 Mutable

Immutable

Java Mutable object can be modified after its creation. Java Immutable object cannot be modified after its creation.
No new object is formed when changes are made to an existing object. Whenever an existing object is changed, a new object is formed.
It provides methods to change the content of an object. It does not provide methods for changing the content of an object.
Getter and setter methods are present in mutable classes. Only getter methods are present and not setter methods.
Mutable classes may or may not be thread-safe. Immutable classes are thread-safe by default.
Some common examples of mutable classes in java are StringBuffer, StringBuilder, and java.util.Date. All Legacy classes, Wrapper classes, String class, are common examples of Immutable classes in java.

不変

Java Mutable オブジェクトは、作成後に変更できます。 Java Immutable オブジェクトは、作成後に変更できません。 既存のオブジェクトに変更を加えた場合、新しいオブジェクトは形成されません。 既存のオブジェクトが変更されるたびに、新しいオブジェクトが形成されます。 オブジェクトのコンテンツを変更するメソッドを提供します。 オブジェクトのコンテンツを変更するメソッドは提供されません。 ゲッター メソッドとセッター メソッドは可変クラスに存在します。 ゲッター メソッドのみが存在し、セッター メソッドは存在しません。 可変クラスはスレッドセーフである場合とそうでない場合があります。 不変クラスはデフォルトでスレッドセーフです。 Java の可変クラスの一般的な例としては、StringBuffer、StringBuilder、java.util.Date などがあります。 すべてのレガシー クラス、ラッパー クラス、文字列クラスは、Java における不変クラスの一般的な例です。 テーブル>

可変 Java と不変 Java の例

可変 Java と不変 Java の例を以下に示します。

例 #1 – Java の可変クラス

次に、Java での可変クラスと不変クラスの作成を示す Java コード例を見ていきます。

コード:

package com.edubca.mutabledemo;
public class MutableDemo {
private String studentName;
private int rollNumber;
MutableDemo (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
// this setter can modify the name
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getRollNumber() {
return rollNumber;
}
// this setter can modify roll number
public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}
public static void main(String[] args) {
MutableDemo obj = new MutableDemo ("John" , 100);
System.out.println("Original Name is " + obj.getStudentName());
System.out.println("Original Roll Number is " + obj.getRollNumber());
// update the name, and roll number as  is mutable
obj.setStudentName("James");
obj.setRollNumber(102);
System.out.println("Modified Name is " + obj.getStudentName());
System.out.println("Modified Roll Number is " + obj.getRollNumber());
}
}

出力:

可変 Java と不変 Java

上記のコードは、ゲッターとセッターを使用して Java で可変クラスを作成する方法を示しています。

例 #2 – Java の不変クラス

次に、Java で不変クラスを作成する方法を見ていきます。

コード:

package com.edubca.immutabledemo;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
public ImmutableDemo  (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public static void main(String[] args) {
ImmutableDemo obj = new ImmutableDemo  ("John" , 100);
// Since no getters are available contents cannot be modified.
// Also as variables are declared final they cannot be modified
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
}
}

出力:

可変 Java と不変 Java

上記のコードは、Java 不変クラスの作成を示しています。不変クラスを作成するときは、次の点に留意する必要があります:

  • 不変クラスは継承できないため、final でなければなりません。
  • 不変クラスのすべてのフィールドは、final にする必要があります。
  • 変更可能なオブジェクトが不変更クラスのフィールドとして使用される場合、その内容が変更されないように特別な処理を実装する必要があります。
  • パブリック コンストラクターが存在する必要があります。
  • すべての変数のゲッター メソッドを定義する必要があります。
  • 変数にはセッター メソッドが存在してはなりません。

結論

上記の説明から、Java における可変と不変の違いが明確に理解できました。また、可変クラスと不変クラスがどのように作成されるかを示す Java の例も見てきました。不変クラスはデフォルトでスレッドセーフですが、可変クラスはスレッドセーフである場合とそうでない場合があることに注意することが重要です。

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール