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