#1. 原因: 文字列同一性判定
//String is reference type String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); // false System.out.println(str1.equals(str2)); // true
2. 関係演算子「==」
##ポイント: "==" は基本データ型の対応する値の同一性判定のみを処理でき、参照データ型(アドレスに値が格納されるもの)には適用されません
public class Main { public static void main(String[] args) { int n=3; int m=3; // true System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String("hello"); // false System.out.println(str1==str2); str1 = str; str2 = str; // true System.out.println(str1==str2); } }
n==m結果はtrue、これはわかりやすいですね、変数nと変数mに格納される値はどちらも3であり、等しいはずです。 str1 と str2 の 2 つの比較結果が異なるのはなぜですか?これを理解するには、基本データ型変数と非基本データ型変数の違いを理解するだけで済みます。
Java の 8 つの基本データ型
浮動小数点型: float、double、整数型: byte、short、int、long、文字型: char、Boolean 型: ブール値。
これら 8 つの基本データ型の変数は、変数に直接「値」が格納されているため、関係演算子 == を使用して比較する場合、比較されるのは「値」そのものになります。 浮動小数点型と整数型は符号付き型であり、char は符号なし型であることに注意してください。
文字列型などの非基本データ型 (参照型) の変数の場合, 参照型変数は、「値」そのものではなく、それに関連付けられたオブジェクトのメモリ内のアドレスを格納します。たとえば、str1 は直接保存された文字列「hello」ではなく、オブジェクトに対応するアドレスです。
したがって、== を使用して str1 と str2 を初めて比較すると、結果は false になります。これらはそれぞれ異なるオブジェクトを指しているため、つまり、実際に格納されているメモリアドレスが異なります。 2 番目の比較では、str1 と str2 は同時に str が指すオブジェクトを指しているため、結果は間違いなく true (アドレスは同じ) になります。
3. オブジェクト メソッド "equals()"
equals メソッドは基本クラス Object のメソッドであるため、Object を継承するすべてのクラスがこのメソッドを持ちます。 。 Object クラスでは、equals メソッドを使用して、2 つのオブジェクトの参照が等しいかどうか、つまり、それらが同じオブジェクトを指しているかどうかを比較します。
public class Main { public static void main(String[] args) { String str1 = new String("hello"); String str2 = new String("hello"); // true System.out.println(str1.equals(str2)); } }
String クラスは、指されたオブジェクトを比較するために、equals メソッドをオーバーライドします。 strings オブジェクトに格納されている文字列が等しいかどうか。 Double、Date、Integer などの他のクラスでは、指定されたオブジェクトに格納されている内容が等しいかどうかを比較するために、equals メソッドをオーバーライドしています。
概要:
== の場合: 基本データ型の変数に作用する場合、格納されている「値」が等しいかどうかを直接比較します。参照型変数では、参照型変数が指すオブジェクトのアドレスが比較されます。
equals メソッドの場合:equals メソッドがオーバーライドされていない場合は、参照型変数が指すオブジェクトのアドレスが比較されます。 String として、Date などのクラスが equals メソッドをオーバーライドする場合、ポイントされたオブジェクトの内容が比較されます (equals メソッドは基本データ型の変数には作用できません)。
その他の関連記事やチュートリアルについては、Java 入門
を参照してください。以上がJavaでの文字列同一性判定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。