Javaでの文字列同一性判定

王林
リリース: 2019-11-29 15:29:28
転載
2378 人が閲覧しました

Javaでの文字列同一性判定

#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
ログイン後にコピー

オンライン学習ビデオ共有:java在オンラインラーニング

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート