0

重複の可能性: Java で
の Equals と ==
文字列比較と文字列インターンの違い

今回はかなり自明な質問です。

編集: == が等しくないことを理解しています。私が理解できなかったのは、 "a" == "a" の両方の a が割り当てられたか、同じオブジェクトインスタンスであるかのように扱われた理由です (そうです)。

編集誰かが質問を読みましたか、それとも閉じるボタンを押しましたか? 上記のいずれとも関係ありません。equals メソッドについて言及している場所を教えてください.....

4

7 に答える 7

13

"a" == "a""a" は文字列リテラルとして扱われ、プールされるため、true になります。両方の参照が同じオブジェクトを指しているため、両方の "a" が同じインスタンスを指しているため、== は true を返します。

あなたが言うときnew String("a")。まったく新しいオブジェクトがヒープとさまざまな参照で作成されるため、== は false を返します。使用する必要があります.equals()

于 2012-08-01T17:43:56.410 に答える
2
  • == checks for equality in references (pointers of memory)
  • "a" is a string literal and it's stored in constant data table (so that every use of it will point to the same literal)
  • new String("a") allocates a string object with the content of "a" but it is a stand alone object with is own memory space.
  • every new always allocates a different obect, so two allocated object can't have same reference
于 2012-08-01T17:47:11.467 に答える
1
于 2012-08-01T17:47:01.183 に答える
1

"a".equals("a"); を使用する必要があります。

于 2012-08-01T17:45:07.710 に答える
1

使用するnew String("a")と、新しいメモリ ロケーションが作成されます。オブジェクト (文字列はオブジェクト) を == と比較すると、メモリの場所が比較されるため、false になります。これnewにより、2 つの異なるメモリ ロケーションが強制的に作成されました。"a" == "a" は、それぞれのメモリ位置を比較します。これらは文字列リテラルであるため、同じメモリ参照を持っています。文字列を比較する適切な.equals()方法は、String クラスのメソッドを使用することです。

于 2012-08-01T17:52:50.573 に答える
1

"a" == "a"- ここでは、読み取り専用データであるテキスト セグメントにこの文字列を保持します。そして、この文字列が存在するテキスト セグメントのアドレスを比較しているだけです。それはあなたに真実を与えるでしょう。

ただしnew String("a")、ヒープにメモリを動的に割り当て、動的に割り当てられた場所に文字列をコピーします"a"。したがってnew String("a") = new String("a") 、ヒープにメモリを2回割り当てます。そして、あなたはそれらの2つのアドレスを比較していますが、それはまったく異なります. ヒープにメモリを2回割り当てたためです。

于 2012-08-01T19:19:07.193 に答える
-1

Java creates a string-pool for strings that are know in design time. If you write something like

string a = "a"; string b = "b"; a == b will return true because java creates only one object with the same address.

If you write something like

new String("a") == new String("b")

this will return false because two objects are created during runtime with different addresses.

The == operator compares the addresses of the objects, not the values.

于 2012-08-01T17:49:12.403 に答える