ホームページ  >  記事  >  プリミティブには Java の .equals メソッドが必要ないのはなぜですか?

プリミティブには Java の .equals メソッドが必要ないのはなぜですか?

PHPz
PHPz転載
2024-02-08 23:18:21471ブラウズ

Java では、プリミティブ (プリミティブ データ型) は、int、double、char などの Java 言語の基本データ型を指します。対照的に、String、Object などの参照データ型があります。参照データ型とは異なり、プリミティブ型は .equals() メソッドを使用して比較する必要はありません。これは、プリミティブ型変数にはオブジェクト参照ではなく実際の値が格納されるためです。したがって、2 つのプリミティブ型変数を比較する場合、値自体が等しいかどうかを比較するため、== 演算子を直接比較に使用できます。参照データ型の場合は、オブジェクト参照が同じオブジェクトを指しているかどうかを比較するため、.equals() メソッドを使用する必要があります。 Java ではプリミティブ型に .equals() メソッドが必要ないのはこのためです。

質問内容

つまり、Java では文字列を比較する場合、 == はメモリ アドレスのみを比較し、内容は比較しないため、 .equals メソッドを使用する必要があります。大丈夫、それは理解できます。しかし、私が理解できないのは、なぜオリジナルには同じ問題がないのかということです。プリミティブで == 演算子を使用するにはどうすればよいですか。

回避策

これは、プリミティブが完全な Java オブジェクトではないため、 「値によって渡される」のに対し、オブジェクトは「参照によって渡される」という事実に帰着します。

さらに、プリミティブでは .equals() 関数を使用できません。プリミティブはクラスから完全にインスタンス化された Java オブジェクトではなく、クラス/オブジェクトで関数を定義する必要があるためです。

ほとんどのプリミティブには同等のオブジェクト型があります。たとえば、Integerint の完全に実装されたオブジェクト型です。最新の Java では、autoboxing# という名前のオブジェクト型が得られます。 ##。したがって、int を使用する代わりに Integer 型を使用すると、.equals() を呼び出すことができます。 Java の

String は少し特殊ですが、基本的には不変オブジェクトです。

これはランダムな情報の詰め合わせですが、これらを合計すると、何が起こっているのか理解できると思います。

以上がプリミティブには Java の .equals メソッドが必要ないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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