在java中可以使用new运算符或使用+和+ =创建String。那么,所有这些字符串创建技术是否检查字符串池中是否已存在该字符串。如果他们dint那么String创建技术将检查池。
答案 0 :(得分:5)
不,他们没有。
简单示例:
String s = new String("hell");
String hello = "hello";
s += 'o';
System.out.println(hello == hello.intern()); //True
System.out.println(s == s.intern()); //False
System.out.println(s == hello); //False
System.out.println(s.intern() == hello); //True
//To sum up : s != s.intern() == hello.intern() == hello
这里新版本的“s”不是“你好”的内部版本
如果您想拥有特定字符串的池版本,可以使用intern()
方法(就像我上面所做的那样)。这样你肯定会有相同的参考。
资源:
String.intern()
(您可能认为该链接指向valueOf(double)
,但intern()
方法正好在之后;)答案 1 :(得分:3)
只有字符串常量和文字才会自动实现。如果要连接或以其他方式创建字符串,则需要实际调用intern()方法。见http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#intern()。