String str1 = new String("abc");  
String str2 = "abc";  
System.out.println(str1==str2);
很疑惑,为什么返回值居然是false

解决方案 »

  1.   

    2个不同的对象:
    new String("abc")   这是一个对象
    "abc"  这是另外一个对象是不同的引用。
      

  2.   

    关于字符串是否相等,要用str1.equals(str2)来判断,这个是常识了..........
      

  3.   

    讲的详细点嘛,String str2 = "abc";不是会去堆内存中找abc是否存在吗,存在str2就指向它;第一句的时候不是已经new了一个abc吗,为什么str2没能指向它
      

  4.   

    这里比较的是内存地址, 对象不一样地址是不一样的 , 你这里的“abc”是两个不同的对象,要比较表面值是用equals比较
      

  5.   

    ==这个运算符比较的是地址,两个ABC的地址是不一样的。不是比较的abc这个内容。
      

  6.   

    String str1 = new String("abc");  // 创建2个对象,一个在堆里,一个在字符串池。
    String str2 = "abc";  //不创建对象,字符串池已有。
    System.out.println(str1==str2); //两个地址不一样。一个指向堆,一个指向池。所以是false.
      

  7.   

    我就是比较引用啊,刚看了下说String str1 = new String("abc"); 引用对象在堆中,不太明白?
      

  8.   

    String str1 = new String("abc");    //str1指向的是堆内存的地址空间
    String str2 = "abc";                //str2指向的是常量池的内存地址空
    System.out.println(str1==str2);  //肯定是false了如果判断 字符串(或对象)是否相等 ,麻烦请用:str1.equals(str2) 
      

  9.   

    谢谢大家,大概知道额,原来会涉及一个String Pool的问题