那位大侠知道String s="abce" 与 String s=new String("abcd") 的区别,请告诉在下地声,谢谢

解决方案 »

  1.   

    String s="abce"是一种非常特殊的形式,和new 有本质的区别.它是java中唯一不需要new 就可以产生对象的途径.以 String s="abce";形式赋值在java中叫直接量,它是在常量池中而不是象new 一样放在压缩堆中.
    这种形式的字符串,在JVM内部发生字符串拘留,即当声明这样的一个字符串后,JVM会在常量池中先查找有有没有一个值为"abcd"的对象,如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,如果没有,则在常量池中新创建一个"abcd",下一次如果有String s1 = "abcd";又会将s1指向"abcd"这个对象,即以这形式声明的字符串,只要值相等,任何多个引用都指向同一对象.而String s = new String("abcd");和其它任何对象一样.每调用一次就产生一个对象.只到它们调用
    intern()方法时才会产生上面那种效果.