いいえ、毎回別の文字列を作成しません。文字列定数はです。 - 実際には定数 "NotSubscribed"は、このメソッドが実行されるたびに、コード全体で同じ文字列オブジェクトを参照します。
section 3.10.5 of the Java Language Specificationより:
各文字列リテラルは、クラス列(§4.3.3)のインスタンスへの参照(§4.3)(§4.3.1、§12.5)です。 Stringオブジェクトは定数値を持ちます。文字列リテラル、またはより一般的には、定数式(15.28)の値である文字列は、String.internメソッドを使用して一意のインスタンスを共有するように「中止」されています。
私は単なる文字列が作成されている場合、それは文字列プールに保管され、その後、それは常に再作成されずにプールから取得されていることを思い出した:しかし、あなたの編集に
。私は正しい?
いいえ、それは正しくありません。文字列のうち、定数はデフォルトで使用できません。たとえば、次のコードを実行するたびに:
public List<String> createStrings() {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add("foo" + i);
}
return list;
}
...これで別の10文字列が作成されます。
すべての文字列が "文字列プール"に格納されているわけではありませんが、プログラムのリテラルは(Skeet氏が記述しているように)です。そのため、関数によって新しいStringが作成されることはありません。 –