public class Test {
private static String s = "string";//(1)
public static void main(String a[])
{
String t="strin"+"g";
print(s==t);
}
public static void print(Object o) {
System.out.println(o.toString());
}
}
运行结果是:true
如果把(1)语句改成"private static String s = new String("string");",则运行结果是:false这是什么原因?
是不是跟常量池相关,不明白,请大家解释,谢谢!
private static String s = "string";//(1)
public static void main(String a[])
{
String t="strin"+"g";
print(s==t);
}
public static void print(Object o) {
System.out.println(o.toString());
}
}
运行结果是:true
如果把(1)语句改成"private static String s = new String("string");",则运行结果是:false这是什么原因?
是不是跟常量池相关,不明白,请大家解释,谢谢!
执行语句String s=new String("abc")时,不管字符串池中是否存在字 符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给s。 前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。
也不全和字符串常量池有关。private static String s = new String("string");//s创建了两个对象,一个字符串,一个引用对象。
String t="strin"+"g";就指向字符串常量池中的string。所以第一种情况为true,第二种为false
我的理解是:
一个比较值,
一个比较地址。
new String()创建了新的地址空间了
执行语句String s=new String("abc")时,不管字符串池中是否存在字 符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给s。 前一语句的效率高,后一语句的效率低,… 不错