String aa="abc";
 if(aa=="abc"){
     System.out.print("dddddddddd");
 }
这个会打印出来        String aa=new String("abc");
 if(aa=="abc"){
     System.out.print("dddddddddd");
 }
而这个不会打印,请问这是为什么啊,谢谢

解决方案 »

  1.   

    用aa.equals("abc")
    不要用aa=="abc"又是equals和==的区别的问题
      

  2.   

    第一个都是 串池 中的 
    是同一个对象 
    第2个中有一个是new的对象,另一个为串池中的string 的 == 是比较对象的
      

  3.   

    String aa="abc";
    aa=="abc"都是字符串 他们在内存中都是一个,地址相同String aa=new String("abc");
    会创建一个新的对象 和 “abc”
    地址不同
      

  4.   

    对的。
    Java为了提高效率,对程序中直接写出来的字面量字符串,只要值一样的,都共享池中同一个对象,导致程序中"abc"都是同一个对象。而new String("abc")就不是了,是按照用户的意图新实例化的另一个对象。
      

  5.   

    用aa.equals("abc")
    不要用aa=="abc"又是equals和==的区别的问题
      

  6.   

    首先 ==是用内存地址比较,equals是对象内容比较(就是逻辑相等)
     String aa="abc";
     if(aa=="abc"){
         System.out.print("dddddddddd");
     }
    中的"abc"是字符串产量共享,所以地址一样。aa=="abc"为真String aa=new String("abc");
     if(aa=="abc"){
         System.out.print("dddddddddd");
     }
    aa新开辟了空间地址与"abc"不一样,所以aa=="abc"为假
      

  7.   

    new就新分配内存,显然不等。。用equals