ホームページ >Java >&#&はじめる >イコールと==の違いを詳しく説明します

イコールと==の違いを詳しく説明します

王林
王林転載
2020-09-28 16:17:462263ブラウズ

イコールと==の違いを詳しく説明します

まず、JVM におけるメモリ割り当ての知識を紹介しましょう:

(推奨チュートリアル: java コース)

JVM では、メモリはヒープ メモリとスタック メモリに分割されます。それらの違いは次のとおりです。オブジェクト (新しいオブジェクト) を作成すると、オブジェクトのコンストラクターが呼び出されて領域が開かれ、オブジェクト データがヒープ メモリに保存され、同時に対応する参照がスタックに生成されます。後続のコードでこれを呼び出すときは、スタック メモリ内の参照を使用します。もう 1 つ注意すべき点は、基本的なデータ型はスタック メモリに格納されるということです。

equals と == の違いについての最初の理解:

== は 2 つの変数またはインスタンスが同じメモリ空間を指しているかどうかを判断することであり、equals は 2 つの変数またはインスタンスが同じメモリ空間を指しているかどうかを判断することです。変数またはインスタンスは同じメモリ空間を指していますが、指しているメモリ空間の値は同じですか? == はメモリ アドレスの比較を指し、equals() は文字列の内容を比較します。 == は参照が同じかどうかを指し、equals() は値が同じかどうかを指します。

絵を使ってそれらの関係を簡単に表現します:

イコールと==の違いを詳しく説明します

テスト:

イコールと==の違いを詳しく説明します

# の詳細な説明##equals と == の違い:


== は変数 (スタック) メモリに格納されているオブジェクトの (ヒープ) メモリ アドレスを比較し、そのアドレスが変数 (スタック) メモリに格納されているかどうかを判断するために使用されます。 2 つのオブジェクトは同じです。つまり、それらが同じオブジェクトを参照しているかどうかです。比較されるのは実際のポインタ操作です。 equals は、2 つのオブジェクトの内容が等しいかどうかを比較するために使用されます。すべてのクラスは java.lang.Object クラスを継承するため、すべてのオブジェクトに適用できます。このメソッドがオーバーライドされない場合、呼び出しは引き続き Object. メソッドになります。クラスですが、Objectのequalsメソッドは==判定を返します。

String s="abcd" は非常に特殊な形式であり、基本的に new とは異なります。これは、Java で new を使用せずにオブジェクトを生成できる唯一の方法です。 String s="abcd"; 形式の代入は Java では直接変数と呼ばれ、新品のような圧縮ヒープではなく定数プールにあります。

この形式の文字列は JVM 内に保持されます。つまり、このような文字列を宣言した後、JVM はまず定数プール内で値「abcd」を持つオブジェクトを検索します。つまり、現在の参照に割り当てられます。つまり、元の参照と現在の参照は同じオブジェクトを指します。そうでない場合は、定数プールに新しい "abcd" が作成されます。次回、文字列 s1 がある場合は、 = " abcd"; は、s1 がオブジェクト "abcd"、つまり、この形式で宣言された文字列を指すようにします。値が等しい限り、複数の参照は同じオブジェクトを指します。

String s = new String("abcd"); は他のオブジェクトと同じで、呼び出されている限り、呼び出されるたびにオブジェクトが生成されます。 String str = "hello"; まず、メモリ内にオブジェクト "hello" があるかどうかを確認し、存在する場合は、str がその "hello" を指すようにします。

メモリに "hello" がない場合は、"hello" を保存する新しいオブジェクトを作成します。 String str=new String ("hello") は、オブジェクト "hello" がすでに存在するかどうかに関係なく、メモリ内に、「hello」を保存する新しいオブジェクトを作成します。

テスト:

イコールと==の違いを詳しく説明します

関連する推奨事項:

Java の概要

以上がイコールと==の違いを詳しく説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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