如此帖所解释,String字面量会自动池化,但使用new关键字构建的对象则不会,因此需要使用intern方法。但即使使用intern方法,仍然会创建一个新对象,那么intern方法有什么用呢?
String s = "Example";
String s1 = new String("Example"); // will create new object
String s2 = new String("Example").intern(); // this will create new object
// but as we are calling intern we will get reference of pooled string "Example"
现在
System.out.println(s == s1); // will return false
System.out.println(s == s2); // will return true
System.out.println(s1 == s2); // will return false
intern方法有什么用途呢?
编辑
我已经理解了intern方法的工作原理,但我的问题是为什么要使用intern方法?因为要调用intern方法,我们必须使用new创建字符串对象,这将创建字符串的新实例!
String s3 = new String("Example"); // again new object
String s4 = s3.intern();
System.out.println(s3 == s4); // will return false
因此,调用intern方法将不会将s3指向池中的字符串。 intern方法将返回对池中字符串的引用。
另外,如果尚未池化,则调用intern方法将推送字符串到池中?这是否意味着每次调用任何字符串上的intern都将被推送到池中?