好像没有什么区别,我喜欢用String s="aa";

解决方案 »

  1.   

    没有什么区别,就是在应用中,new String("aa")要不停的开辟内存
      

  2.   

    class a{
    String s=new String("aa"); 
    }
    相应字节码为
    class a extends java.lang.Object{
    java.lang.String s;a();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   aload_0
       5:   new     #2; //class String
       8:   dup
       9:   ldc     #3; //String aa
       11:  invokespecial   #4; //Method java/lang/String."<init>":(Ljava/lang/Strin
    g;)V
       14:  putfield        #5; //Field s:Ljava/lang/String;
       17:  return}class b{
    String s="aa";
    }
    相应字节码为
    class b extends java.lang.Object{
    java.lang.String s;b();
      Code:
       0:   aload_0
       1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
       4:   aload_0
       5:   ldc     #2; //String aa
       7:   putfield        #3; //Field s:Ljava/lang/String;
       10:  return}
      

  3.   

    又区别,s="aa";只开辟一次内存空间
    new String("aa")用一次就开辟一次。
      

  4.   

    由于编译器对常数是实行内存共享机制的,对字符串常数也是这样.假如
    String s1="aa";
    String s2="aa";
    s1和s2指向的内存地址是一样的。
    但是假如你用了String s=new String("aa"),
    String s1=new String("aa"); 
    String s2=new String("aa"); 
    s1和s2指向的内存地址是不一样的。
      

  5.   

    又区别,s="aa";只开辟一次内存空间
    new String("aa")用一次就开辟一次
    哈哈,正好反过来。。s="aa"是开辟了空间。
    new String("aa")  是 "aa"已经开辟了空间,new String()是对"aa"的一个引用。
      

  6.   

    又区别,s="aa";只开辟一次内存空间
    new String("aa")用一次就开辟一次。
      

  7.   

    我赞成 totodo(土豆仙) 的说法,我也是卡在这种地方的人.嘿嘿!学习学习!
      

  8.   

    明白了
    new就是要开辟新空间
    不用new就是只申请一次空间
      

  9.   

    String s = "aa";存储在常量池(constant pool)
    编译期间就决定了
    String s = new String("aa")在堆栈上重新分配一块内存
    看这个程序你可能更明白:
    String a = "aa";
    String b = new String("aa");
    String c = "a"+"a";
    System.out.println(a == b);  //false
    System.out.println(a == c);  //true
    System.out.println(a.equals(b));//true
      

  10.   

    理由上面已经讲的很清除了EFFECTIVE JAVA中推荐使用String s = "aa";
      

  11.   

    String s=new String("aa"); 每次执行时都创建一个新的string实列
    String s="aa“只使用一个string实际列
    这是书上说的《effective java》11页
      

  12.   

    EFFECTIVE JAVA说的可以更节省内存空间
      

  13.   

    EFFECTIVE JAVA可以更节省内存空间
      

  14.   

    VVV_lucky(*太阳*) 说的正确,不过是在标准的jvm里,如果是厂商私有的话,每一个的实现机制不同,可能会不一样