0

私は次の概念について読んでいinterned stringsます:

String s1 = "Hi";
String s2 = "Hi";
String s3 = new String("Hi");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1.equals(s3)); //true

newString は Java のオブジェクトですが、プログラミングでは文字列が遍在しているため、コンパイラでは、演算子を使用する必要はなく、String 参照変数に代入するためにリテラルを使用できます。割り当てにリテラルを使用すると、interned string. 同じリテラルを持つすべてのインターンされた文字列は、メモリ内の同じスペースを指すため、同等の演算子が許可されます。

equals()Java では文字列がオブジェクト (他の言語のように配列ではない) であり、オブジェクトの内容は equals を使用して比較する必要があるため、このメソッドを使用して 2 つの文字列参照変数を比較する方が適切ではないでしょうか。()、==オブジェクトに関する演算子は、それらがメモリ内の同じ場所を指していることだけを教えてくれるので?

==それとも、インターンされた文字列の概念自体が、同じリテラルを共有している場合にのみ、1 つの文字列が別の文字列と等価 ( ) になることを明確にしているため、より適切ではないでしょうか?

それがより適切である場合、人々は一般的にそのequals()方法を関係なく使用しますか、それともやり過ぎと見なされますか?

4

1 に答える 1

4

はいequalsは、文字列オブジェクトの内容を比較するために使用されるメソッドです。== を使用すると、2 つの参照が同じメモリ位置を指しているかどうかのみを比較できます。ただし、equals を使用すると、2 つの参照が同じ文字列コンテンツを保持しているかどうか、同じメモリ位置にあるかどうかを確認できます。論理的に言えば、2 つの文字列を比較しようとするときは、それらの文字列のメモリ位置ではなく、それらの文字列の内容を比較しようとする必要があります。

練習として、またはほぼどこでも文字列 equals メソッドが文字列比較に使用され、== ではありません。

于 2013-07-12T18:42:01.490 に答える