http://fanqiang.chinaunix.net/a4/b5/20011114/0708001563.html

解决方案 »

  1.   

    String s1="hello";
    String s2="hello";
    s1和s2是同一个对象String s1=new String("abc");
    String s2=new String("abc");
    s1和s2不是同一个对象
      

  2.   

    创建一个对象一般要用new
    这样初始化:String s=new String("asdf");
    但String 有点特殊,能用双引号中的文字初始化:String s="asdf";
      

  3.   

    String s1="hello";
    String s2="hello";
    s1和s2是同一个对象String s1=new String("abc");
    String s2=new String("abc");
    s1和s2不是同一个对象
    ------------------------------------------第一句:hello放在常量栈中,故s1和s2指向同一地址第二句:s1,s2指向不同的地址,用new的话每次都要新建地址空间
      

  4.   

    第一句:hello放在常量栈中,故s1和s2指向同一地址第二句:s1,s2指向不同的地址,用new的话每次都要新建地址空间
    就是这个意思
      

  5.   

    String s="asdf"在结果上等价于String s=new String("asdf"),但是前者效率高于后者。由于Java会自动为一个字符串常量生成一个String对象,所以后者实际生成2个字符串
      

  6.   


    编译器会为它遇到的每一个字符串直接值,也就是双引号括起来的
    字符串常量都自动的创建一个字符串对象。String s="asdf";//只创建一个字符串
    String s=new String("asdf");// 创建两个字符串所以说前者比后者更高效
      

  7.   

    第一个s指向了"asdf",有点超级链接的感觉。
    而第二个则是类似复制了一个“asdf”,类似复制功能。
    我仅仅是用最普通的形象语言来描述的。这个样子便于理解。