1. まず、String は 8 つの基本データ型に属しません。
オブジェクトのデフォルト値は null であるため、String のデフォルト値も null ですが、これは特別なオブジェクトであり、他のオブジェクトにはないいくつかの特性があります。
2. new String() と new String("") は両方とも、空の文字列であり、null ではありません。
String str=new String (" kvill"); 違い:
ここでは、ヒープやスタックについては説明しません。
定数
プールの単純な概念を簡単に紹介するだけです。 定数プールは、コンパイル中に決定され、コンパイルされた .class ファイルに保存される一部のデータを指します。これには、文字列定数だけでなく、クラス、メソッド、
インターフェース
などの定数も含まれます。 例 1 を見てください:
String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out. print ln( s0==s1 ); System.out.println( s0==s2 );
true true
この例の s0 と s1 の「kvill」は両方とも文字列定数であるため、コンパイル時に決定されるため、s0==s1 は true となり、「kv」と「ill」も文字列定数になります。文字列は複数の文字列定数で構成されており、それ自体が文字列定数でなければなりません。そのため、s2 もコンパイル時に文字列定数に解析されるため、s2 は定数プール A
Quote
の「kvill」でもあります。 したがって、s0==s1==s2 を取得します new String() で作成された文字列は定数ではなく、コンパイル時に決定できないため、new String() で作成された文字列は定数プールには入れられません。独自のアドレス空間を持っています。
例 2 を見てください:
String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 );
false false false
"kvill" のアプリケーションでもあります。 ; これを理解すれば、なぜこの結果が得られるのかがわかります。 4. String.intern():
もう 1 つのポイント: .class ファイル内に存在する定数プールは、実行時に JVM によってロードされ、拡張できます。 String の intern() メソッドは、定数プールを拡張するメソッドです。String インスタンス str が intern() メソッドを呼び出すと、Java は定数プール内に同じ Unicode の文字列定数があるかどうかを確認し、存在する場合は返します。そうでない場合は、定数プールに str に等しい Unicode 文字列を追加し、その参照を返します。例 3 を見ると明らかです。例 3:
String s0= “kvill”; String s1=new String(”kvill”); String s2=new String(“kvill”); System.out.println( s0==s1 ); System.out.println( “**********” ); s1.intern(); s2=s2.intern(); //把常量池中“kvill”的引用赋给s2 System.out.println( s0==s1); System.out.println( s0==s1.intern() ); System.out.println( s0==s2 );
例 4 を見てください:
false ********** false //虽然执行了s1.intern(),但它的返回值没有赋给s1 true //说明s1.intern()返回的是常量池中”kvill”的引用 true
結果:
String s1=new String("kvill"); String s2=s1.intern(); System.out.println( s1==s1.intern() ); System.out.println( s1+" "+s2 ); System.out.println( s2==s1.intern() );
s2 は定数プール内の "kvill" のアドレスであるため、s2==s1.intern() は true です。 。
文字列の場合、これは単に 2 つの文字列の Unicode シーケンスが等しいかどうかを比較し、等しい場合は true を返します。== は、そのアドレスが等しいかどうかを比較します。 2 つの文字列は同じです。つまり、それが同じ文字列への参照であるかどうかです。
6. String インスタンスが生成されると変更されないことがわかっている限り、String が不変であることについては多くのことが言えます。例: String str="kv"+"ill"+" "。 +"ans";
文字列定数は 4 つあります。まず、「kv」と「ill」で「kvill」を生成し、メモリに保存します。次に「kvill」と「」で「kvill」を生成します。最後に、「kvill ans」を生成し、この文字列のアドレスを str に割り当てます。これは、String の「不変性」により多くの一時変数が生成されるためです。 【関連おすすめ】
3. JAVA の intern() メソッドの使用経験の概要
5. Javaにおけるintern()の役割の分析以上がStringオブジェクトのintern()の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。