JAva文字列プールの詳細な理解
1546 ワード
JAva文字列プールの詳細な理解
文字列プールはJavaの特性であり、コードで理解できます.
結果はtrue,false,false,true,true,trueであった.
ここでは文字列プールについて説明します.「文字列プール」は、Javaがメモリ使用率を向上させるために採用した措置です.String a=「Hello」に遭遇した場合.このような文の場合、Javaはまず文字列プールに「Hello」という文字列がすでに存在するかどうかを探し、存在しない場合、文字列「Hello」オブジェクトを確立し、変数aがこのアドレスを指す.そして文String b="Hello"に遭遇すると,文字列プールには既に"Hello"が存在するため,変数bもこのアドレスを直接指し示すことになり,再割り当ての手間が省けた.Javaでは、オペレータ"=="は、2つの基本型について、その内容が同じか否かを判断し、2つのオブジェクトについては、そのアドレスが同じか否かを判断するので、a==bはtrueを返す.ではString c=new String(「Hello」)はどのように処理されるのでしょうか.このような書き方であれば、文字列プールにアクセスするのではなく、変数cのために空間を開き、値を空間に書き込む.したがって、a==cはfalseを返し、c==dは同様にfalseを返す.Stringのequalsメソッドについては,オブジェクトのアドレスではなくオブジェクトの値を比較するので,trueを返すのはおかしくない.
Java仮想マシンには文字列プールがあり、ほとんどの文字列オブジェクトが保存されています.文字列式は、常に文字列プール内のオブジェクトを指します.new操作を使用して作成された文字列オブジェクトは、文字列プール内のオブジェクトを指さすことはありませんが、internメソッドを使用して文字列プール内のオブジェクトを指さすことができます(注意:プールに同じ文字列がある場合--equalsメソッドを使用して決定された場合、プール内の文字列を直接返します.いいえ、プールに文字列を追加してから返します).プール内の2つの等しい文字列を「==」で比較すると、真が返されます.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
文字列プールはJavaの特性であり、コードで理解できます.
String a = "Hello";
String b = "Hello";
String c = new String("Hello");
String d = new String("Hello");
System.out.println(a == b);
System.out.println(b == c);
System.out.println(c == d);
System.out.println(a.equals(b));
System.out.println(b.equals(c));
System.out.println(c.equals(d));
結果はtrue,false,false,true,true,trueであった.
ここでは文字列プールについて説明します.「文字列プール」は、Javaがメモリ使用率を向上させるために採用した措置です.String a=「Hello」に遭遇した場合.このような文の場合、Javaはまず文字列プールに「Hello」という文字列がすでに存在するかどうかを探し、存在しない場合、文字列「Hello」オブジェクトを確立し、変数aがこのアドレスを指す.そして文String b="Hello"に遭遇すると,文字列プールには既に"Hello"が存在するため,変数bもこのアドレスを直接指し示すことになり,再割り当ての手間が省けた.Javaでは、オペレータ"=="は、2つの基本型について、その内容が同じか否かを判断し、2つのオブジェクトについては、そのアドレスが同じか否かを判断するので、a==bはtrueを返す.ではString c=new String(「Hello」)はどのように処理されるのでしょうか.このような書き方であれば、文字列プールにアクセスするのではなく、変数cのために空間を開き、値を空間に書き込む.したがって、a==cはfalseを返し、c==dは同様にfalseを返す.Stringのequalsメソッドについては,オブジェクトのアドレスではなくオブジェクトの値を比較するので,trueを返すのはおかしくない.
Java仮想マシンには文字列プールがあり、ほとんどの文字列オブジェクトが保存されています.文字列式は、常に文字列プール内のオブジェクトを指します.new操作を使用して作成された文字列オブジェクトは、文字列プール内のオブジェクトを指さすことはありませんが、internメソッドを使用して文字列プール内のオブジェクトを指さすことができます(注意:プールに同じ文字列がある場合--equalsメソッドを使用して決定された場合、プール内の文字列を直接返します.いいえ、プールに文字列を追加してから返します).プール内の2つの等しい文字列を「==」で比較すると、真が返されます.
もし疑問があれば伝言を残してあるいは当駅のコミュニティに行って討論を交流して、読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!