public String toString()
{
return "NotSubscribed";
}
我们正试图在实例化对象后限制String在我们的应用程序中的创建。所以,只是想知道每次调用这个toString时是否会创建一个新的String。这可能是一个糟糕的问题,但我不知道答案。请建议。
-
我只记得如果创建了一个String,它就存储在String Pool中,之后总是从池中检索它而不重新创建。我是对的吗?
答案 0 :(得分:9)
不,每次都不会创建另一个字符串。字符串常量是 interned - 所以实际上常量“NotSubscribed”将在整个代码中引用相同的字符串对象,甚至不是每次都执行此方法。
来自section 3.10.5 of the Java Language Specification:
每个字符串文字都是类String(第4.3.3节)的实例(第4.3.1节,第12.5节)的引用(第4.3节)。 String对象具有常量值。字符串文字 - 或者更一般地说,是作为常量表达式的值的字符串(第15.28节) - 使用String.intern方法“实现”以便共享唯一的实例。
但是,在你的编辑中:
我只记得如果创建了一个String,它就存储在String Pool中,之后总是从池中检索它而不重新创建。我是对的吗?
不,那不对。默认情况下,仅限字符串常量。例如,每次运行此代码时:
public List<String> createStrings() {
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
list.add("foo" + i);
}
return list;
}
...这将创建另外10个字符串。