1

私は文字列プールがどのように機能するかを知っています。それは言った:

void doSomething1(){
 System.out.println("This string is now added to the string pool and will stay there even after this method returns");
}

void doSomething2(){
 String msg = new String("This string is now added to the string pool and will stay there even after this method returns");

 System.out.println(msg);
}

doSomething2よりも優れていますdoSomething1。一部の文字列はreused. 私が見る問題は、ケース 1 にあります。文字列は、再度使用されなくても長期間スコープ内にとどまります。

4

3 に答える 3

0

new() 演算子で文字列を作成すると、ヒープに作成され、文字列プールには追加されませんが、リテラルを使用して作成された文字列は、ヒープの PermGen 領域に存在する文字列プール自体に作成されます。

String s = new String("テスト");

オブジェクトを String プールに入れません。明示的に String プールに入れるために使用される String.intern() メソッドを呼び出す必要があります。String オブジェクトを String リテラルとして作成する場合にのみ、たとえば String s = "Test" Java は自動的にそれを String プールに入れます。

于 2015-11-10T06:33:29.170 に答える
-2

Java 7 の場合、新しいメソッドを使用してそうすることができます。便宜上、プールに文字列を入れます。

    String myString="Hello StackOverflow";
    myString.intern();
    if(myString=="Hello StackOverflow")
    System.out.println("Equal");
    else
    System.out.println("Not Equal");
于 2013-08-09T04:45:26.697 に答える