ホームページ  >  記事  >  Java  >  String 文字列の追加と比較の概要 (詳細)

String 文字列の追加と比較の概要 (詳細)

不言
不言転載
2019-04-13 09:36:364047ブラウズ

この記事は String 文字列の加算と比較 (詳細) を紹介します。一定の参考価値があります。困っている友人はそれを参照してください。お役に立てば幸いです。ヘルプ。

String 文字列の追加と比較

public static void main(String[] args)  {
    String a = "helloword";
    final String b = "hello";
    String d = "hello";
    String c = b + "word";
    String e = d + "word";
    String f ="hello"+"word";
    System.out.println(a == c);
    System.out.println(a == e);
    System.out.println(a == f);

}

输出:
true
false
true

最初に明確にしておきたいのは、参照データです。 type = = 比較するのはアドレス値、等しいは書き換えない、比較するのはアドレス値、書き換え後、比較するのは内容 String は書き換える、StringBuffer は書き換えない

#2 番目:

a= =c は、b がfinal 型であるため true です。final 変数が基本データ型または String 型の場合、コンパイル中にその正確な値が分かると、コンパイラはそれをコンパイルとして使用します。 -時定数。つまり、最後の変数が使用される場合、それは定数への直接アクセスと同等であり、実行時に決定する必要はありません。したがって、上記のコードでは、変数 b が Final によって変更されているため、コンパイラ定数として扱われるため、b が使用されている場合、変数 b はその値に直接置き換えられます。したがって、 c = b "word" は c = "hello" と同じです "word" は ---> 最終的には、アドレスではなく内容が直接比較されます。

a ==e は、e = d "word" が実際には StringBuffer オブジェクトを作成し、その StringBuffer オブジェクトを使用して append メソッドを実行して文字列オブジェクト "ab" を作成し、それを次のように変換するため、false になります。弦 。ただし、この変換された String オブジェクト、つまり上記の s3 はヒープに配置されます。 s4 は文字列定数であり、定数プールに配置されます。したがって、返されるものは false です。 ----->アドレス値が異なります

a ==f は、次の理由により true です: 定数が追加されると、実際にはコンパイル中に「helloword」に直接追加されます。これは JVM の最適化されているため、実行時に a と f のバイトコードは同じになります。定数プールには「helloword」があるため、2 つの参照は文字列「helloword」を指しているため、戻り結果も true になります。 ----->同じアドレスを指す

[関連する推奨事項:

Java チュートリアル]

以上がString 文字列の追加と比較の概要 (詳細)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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