public class Test
{
public static void main(String... args)
{
String str = args[0];
System.out.println(str.intern() == str);
}
}结果为false,求解
{
public static void main(String... args)
{
String str = args[0];
System.out.println(str.intern() == str);
}
}结果为false,求解
你可以试下
String str ="aaa";
System.out.println(str.intern() == str);
这就是true
1、执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。
2、执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。
3、当调用intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。String str = args[0];
args[]数组是一个String类型的,String类型是引用类型,给非基本数据类型数组赋值都要使用new关键字(数组的知识),所以,你再控制台输入的值使用new给args[0]赋值,这个字符串的值并没有放到字符串池中,所以,在执行str.intern()时,会重新创建一个str对象,返回的是新str对象的引用。不知这样回答是否明白,第一次回到问题,希望可以采纳!
它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true