String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");
为什么s1和s2的内容相同,地址相同
而s1,s1与s3的内容相同而地址不同,
s3和s4的内容相同而地址也不同啊

解决方案 »

  1.   

    s1,s2指向同一个引用!所以相同,而s3,s4都new了一个新对象,所以地址不同!!!
      

  2.   

    JVM整了一个类似常量池的机制。
      

  3.   

    s1和s2指向的字符串在字符串池中,故地址相同,内容相同
    s3和s4是通过new出来的,分别是不同的对象的引用,故内容相同但地址不同
      

  4.   

    s1和s2指向的字符串在字符串池中,故地址相同,内容相同 
    s3和s4是通过new出来的,分别是不同的对象的引用,故内容相同但地址不同
      

  5.   

    new 就是重新分配地址String s1="abc"; 
    String s2="abc"; 
    s1,s2是在常量池中,
      

  6.   

    首先字符串有一个字符串池,内容相同的字符串在“同一个池中”,用new创建字符串对象,在对堆区中其实创建了两个对像,直接用引号创建的字符串对象在堆区中只有一个对象引用。
      

  7.   

    首先字符串有一个字符串池,可以称之为String Pool有一个前提:String Pool中的对象内容不会重复
    String s1="abc"; 
    String s2="abc"; 
    因S1和s2的内容都为"abc"
    则s1和s2将做为一个对象在String Pool中被创建,String Pool中只有一个实例存在,既表示s1,又表示s2,也就是LZ说的,地址和内容都相同。而对于堆空间,为每个被创建的对象都分配一块空间,所以每个对象的地址都不相同。
    String s3=new String("abc"); 
    String s4=new String("abc"); 
    s3和s4是两个内容相同对象,但地址不会相同,更不会与s1 s2的地址有关系了