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这是什么原因?
是不是跟常量池相关,不明白,请大家解释,谢谢!
解决方案 »
- 问个正则问题
- 想在才单项中用JCheckBOXMenuItem实现多选功能,可它前面的小方框能不能去掉?使其选中时候只显示对号!
- 如何将数据导出至Excel表格
- 谁来帮我讲讲这个式子?特别是等号右面我看不明白 Object c=new long[4];
- xml文件之间如何转化
- 求助一个关于clone的问题
- JavaScript中的静态对象有 、 。
- 最近网站做了改版,大家来提提意见主要是论坛界面,来者有分:)
- csdn.net~{TZ8c5A0f~}???
- 请教Visual cafe 高手,如何解决visual cafe 编程中汉字显示乱码问题
- 谢谢啦 真的想不出....
- 在eclipse下如何结束程序可以调用addShutdownHook
执行语句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。 前一语句的效率高,后一语句的效率低,… 不错