我不认为我应该在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
答案 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对象的引用。