String str = "a";
这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建
如果你以后还用到"a"这个字符串的话并且是这样用:
  String str1 = "a";
  String str2 = "a";
  String str2 = "a";
这4个变量都共享一个字符串"a"
而String str = new String("a");
是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str

解决方案 »

  1.   

    同意
    String 比较特殊一点
      

  2.   

    不解?
    如果说String str1 = "a";,
    不是创建对象的话,那么为什么str1.length() indexOf(),等函数还可以使用呢?
      

  3.   

    ft~~~
    String str1 = "a";
    "a"本身是一个String的对象
    这个语句只不过是把对象"a"的引用赋值给str1
    并不产生新的String对象
      

  4.   

    String str=new String("a") 对象
    String str = "a" 引用
      

  5.   

    public class Test{
    public static void main(String args[]){
    String a = "a";
    String b = "a";
    String newa = new String("a");
    String newb = new String("a");
    if (a == b){
    System.out.println("1");
    }
    if (a.equals(b)){
    System.out.println("2");
    }
    if (newa == newb){
    System.out.println("3");
    }
    if (newa.equals(newb)){
    System.out.println("4");
    }
    if (a == newa){
    System.out.println("5");
    }
    if (a.equals(newa)){
    System.out.println("6");
    }
    }
    }输出:
    1
    2
    4
    6说明:用了New的话会分配单独的内存空间。用“==”是比较两对象的地址和值,而用“.equals()”仅仅是比较了两对象的值。
      

  6.   


    首先"a"是个String对象,
    它是个常量,初始化时分配一块内存
    String str1 = "a";
    String str2 = "a";
    String str3 = "a";
    只是对"a"的引用,str1,str2,str3都指向"a"的内存地址。
    为什么能用length(),indexOf()方法?"a"是String常量啊。
      

  7.   

    String s="aa";
    给一个字副串初始化;String s=new String("aa");
    你可以把"String"看做一个类 s是类的一个对象!!
      

  8.   

    String str1 = "a";
    String str2 = "a";
    String str3 = "a";如果把str2改为"b",与"a"不一样的值,str2不指向str1了。
    或构造新的,或指向已有的字符串"b"的内存地址