Java は Flyweight デザイン パターンを使用して、JVM で String インスタンスを管理します。つまり、このパターンは、格納するインスタンスが多すぎる可能性があるオブジェクトを共有することになります。
String s ="hello";
ここで、「hello」がすでに存在する場合、JVM は最初に String プールをチェックインしました。もしそうなら、s
それを直接指し始めます。それ以外の場合は、最初に「hello」がプールに追加され、次にそれをs
指します。
String s= new String ("hello");
ここでは、リテラル文字列 "hello" が String プールに既に存在していましたが、引き続き new を使用して、ヒープ上に同じ値 "hello" を持つ新しい String オブジェクトを作成します。
String s1= new String("hello");
同上。これで、3 つの String オブジェクトができました。
String s = null;
ここでは、変数を単純に に初期化しましたnull
。ここでは特別なことは何も起こっていません。
String s = new String (null);
String コンストラクターがオーバーロードされているため、これは機能しません。かかる場合がありString
ます。かかる場合もありchar[]
ます。しかし、それを渡すとnull
、一致するデータ型がないため、コンパイラは呼び出すコンストラクタを認識できず、あいまいなエラーが発生します。