String s1,s2;
s1=new String("we are students");
s2=new String("we are students");String s3,s4;
s3="how are you";
s4="how are you";
s1 s2引用不同的实体
s3 s4是引用同一个实体为什么会不同呢?

解决方案 »

  1.   

    一个字符串本身就是一个实体,而s3和s4都="how";
    所以s3 和s4是引用同一个实体;而s1 new 了一个String()实体;
    s2也 new 了一个String()实体;只不过s1和s2的内容一样而已。
      

  2.   

    String类的构造可以创建字符串对象,如
    String s;
    s=new String("we are students");
    也可以一步完成:
    String s=new String("we are students");
    也可以用一个已创建的字符串创建另一个字符串,如
    String tom=String(s);
    为什么不是String tom=s? tom和s会是引用同一个实体还是不同实体?
      

  3.   

    也可以用一个已创建的字符串创建另一个字符串,如
    String tom=String(s);
    为什么不是String tom=s? tom和s会是引用同一个实体还是不同实体?你敲过String tom = s 吗? 试试,没验证过就别说不对
      

  4.   

    String tom=String(s);你没有覆盖String的方法就不能这样写.
      

  5.   

    如果想引用两个不同的实体,那么可以写成
    String tom=new String(s);如果不是,那么String tom=s;是正确的。
    (写String tom=new String(s);那么面试的时候绝对是直接被cut掉的)
      

  6.   

    String   tom=String(s);
    这样写是不可以的,除非你写了一个String的方法,并且这个方法的返回值是String类型的。
    String   tom=new   String(s); 
    而这样写是构造了另外的一个对象的实例。
    new的意思就是创建一个对象的实例。
      

  7.   

    实际上String 类型的值是放在一个字符串常量池里,s3="how   are   you"; s4="how   are   you";当s3执行完了后池里有一个对象,内容就是"how are you",再执行s4 的话,jvm首先会去池中找,当在池中找到"how are you"的话,s4直接引用它,若没找到,在创建新的对象引用. 
    s1=new   String("we   are   students"); s2=new   String("we   are   students");栈中的s1,s2分别引用堆中两个对象,堆中的这两个对象指向常量池中的同一个常量"we are students",所以s1,s2的并不相等.