我们应该在jdk 7和+中使用String.intern吗?

时间:2015-03-24 11:34:21

标签: java string

我不认为我应该在jdk7和+中使用String.intern(),原因如下。
Java自动实习字符串文字。这意味着在许多情况下,==运算符似乎对字符串的工作方式与对int或其他原始值的处理方式相同。
由于interning对于String文字是自动的,因此intern()方法将用于使用new String()构造的字符串

String s1 = "Rakesh";

String s2 = "Rakesh";
String s3 = "Rakesh".intern();
String s4 = new String("Rakesh"); // why would i do this?
String s5 = new String("Rakesh").intern(); // looks stupid , better create like s1

s1,s2,s3,s4指向相同的东西。

你的意见plz

2 个答案:

答案 0 :(得分:1)

String s3 = "Rakesh".intern();

这没有任何作用 - 表示字符串文字的String对象已经在字符串池中,因此intern()在此处不执行任何操作,只返回池中已有的字符串。它与String s3 = "Rakesh";

相同
String s4 = new String("Rakesh"); // why would i do this?

没有理由以这种方式创建String对象,方法是将字符串文字传递给构造函数。 String个对象是不可变的,并且永远不必以这种方式显式创建字符串文字的副本。

String s5 = new String("Rakesh").intern(); // looks stupid , better create like s1

您已在评论中自行回答。

我的建议:忘记intern()方法 - 或者把它放在远离你心灵的地方。在99,9%的Java程序中,您不需要这种方法。此方法仅适用于非常特殊的罕见情况。

答案 1 :(得分:0)

请阅读Java doc。

当调用实习方法时,如果池已包含  字符串等于此String对象由。确定  equals(Object)方法,然后是池中的字符串  回。否则,将此String对象添加到  返回池和对此String对象的引用。