String s="xxx"与 String s=new String("xxx")有什么区别吗?

解决方案 »

  1.   


    我的理解:String s="xxx" 是创建一个无名对象 "xxx",然后s引用这个无名对象String s=new String("xxx") 是创建一个字符串对象s,初始化值为"xxx"如果理解有错误,还请大家指正 ^_^
      

  2.   

    String s="xxx"和new是有区别的,String s="xxx"形式赋值是在常量池中而不是象new一样放在压缩堆中这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"xxx"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"xxx",下一次如果有String s1 = "xxx";又会将s1指向"xxx"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象.而String s = new String("xxx")和其它任何对象一样.每调用一次就产生一个对象.只到它们调用
    intern()方法时才会产生上面那种效果书上是这么解释的,请各位继续补充。
      

  3.   

    String s="xxx",是一个常量字符串,即一个字符串的对象String s=new String("xxx")创建了两个对象,首先是产生了一个"xxx"对象,然后new产生的字符串对象,是对"xxx"的一个拷贝