ホームページ >Java >&#&チュートリアル >Java String と new String() の違いの比較分析

Java String と new String() の違いの比較分析

Y2J
Y2Jオリジナル
2017-04-27 09:54:591180ブラウズ

この記事では主に Java String と new String() の違いに関する関連情報を紹介しますので、必要な方は参考にしてください

Java String と new String() の違い

スタック領域のストレージのリファレンスと基本オブジェクトを格納することはできませんが、オブジェクトはヒープ領域に格納されます。 == はアドレスを比較し、equals() はオブジェクトの内容を比較します。

String str1 = "abcd" 実装プロセス: まずスタック領域に str 参照を作成し、次に String プール (スタックとヒープとは独立して存在します) でコンテンツ "abcd" が指すオブジェクトを探します。文字列プールにオブジェクトがない場合は作成し、存在する場合は str1 を直接 "abcd"" にポイントします。文字列変数 str2 = の場合は、str1 を直接 "abcd"" にポイントします。 「abcd」は後で定義され、直接ポイントされます。 str2 参照は、文字列プールにすでに存在する「abcd」をポイントしており、str1 が割り当てられると (str1="abc")、オブジェクトは再作成されません。これまでは "abcd" を指していましたが、再び String プール内のオブジェクトを指します。この時点で String str3 = "abc" を定義し、str1 == str3 操作を実行すると、戻り値は true になります。値が同じでアドレスも同じなので、このとき「abc」という内容の str1 に +Connection str1 = str1+"d" という文字列があった場合、str1 は新しく作成されたものを指します。このとき、ヒープ内に内容「abcd」を持つオブジェクト、つまり str1==str2 が実行されますが、アドレスが異なるため戻り値は false になります

String str3 = new String("abcd") 実装。プロセス: ヒープ内に直接オブジェクトを作成します。後で String str4 = new String("abcd") がある場合、str4 は前のオブジェクトを指しませんが、オブジェクトを再作成してそれを指します。このとき =str4 が実行されると、2 つのオブジェクトのアドレスが異なるため、戻り値は false になります。str3.equals(str4) の場合は、内容が同じであるため、true を返します。コードにアクセスしてください:

String str1 = "abcd";
String str2 = "abcd";
String str3 = new String("abcd");
String str4 = new String("abcd");
System.out.println(str1==str2);//true地址一样
System.out.println(str3==str4);//false,但地址不一样
System.out.println(str3.equals(str3));//true,值一样
System.out.println(str2.equals(str3));//true,值一样
System.out.println((str1+"a")==(str2+"a"));//false;进行了+连接地址不一样

以上がJava String と new String() の違いの比較分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。