日期:2014-05-20  浏览次数:20627 次

问一个概念性的问题?
请问s=new   String( "Hello ");和s= "Hello ";有什么区别~~

------解决方案--------------------
s= "Hello ";表示Hello是一个字符串常量池中的对象而不是在堆中,如果有s1= "Hello ";的话,s==s1会返回true。

s=new String( "Hello ");相当于先在字符串常量池中生成一个字符串对象Hello(如果目前常量池中不存在该对象的话),然后在heap中生成一个对象(new String操作),该对象的内容就是在常量池中生成的字符串对象。即s=new String( "Hello ");相当于s0= "Hello ";s=new String(s0);如果还有s1=new String( "Hello ");那么s==s1返回false,而s.equals(s1)返回true。