看如下代码  
String str=" 123 435 sdf ag";
str.split(" ")[0] == "" //output: false
str.split(" ")[0].equals("")  //output: true这是为什么啊
好像只有像 new String(str) == str  //  <-- false   才是啊   这个“”为什么也会这样?先谢了

解决方案 »

  1.   

    这个和JVM的实现有关,其实可以不必细究的,你只知道字符串比较必须用 equals就OK了。
      

  2.   

    ==其实比较的是地址, equals比较的是内容。
      

  3.   

    str.split(" ")[0] == "" //output: false 
    你分割出来子字符串占用了新的内存 “==”比较的是内存地址 所以是false
      

  4.   

    "=="是比较的是是不是同一个对象,或是两个引用指的是不是同一个对象。而equals()比较的是两个对象的内容是不是相等。
      

  5.   

    用"=="比较的两个对象就好比是两兄弟,虽然样子相似,但是是两个人!“==”比较的是两个内存空间地址是否相等!即比较的是两个变量的值是否相等!
    用equals比较的两个对象,就好比是同一个人的两个称谓一样!"equals"比较的是对象的内容是否相等!多用于比较字符串!
    希望可以帮到你更好的理解两者的区别!
      

  6.   

    数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。
    str.split(" ")[0]的值在堆中存放,而“”的值在内存中存放。
    ==的意义是当比较的是基本类型是比较的是值,如果有引用类型的话比较的是地址而不是值了。所以会是false
    equal()比较的就是值了。
      

  7.   

    用"=="比较的两个对象就好比是两兄弟,虽然样子相似,但是是两个人!“==”比较的是两个内存空间地址是否相等!即比较的是两个变量的值是否相等! 
    用equals比较的两个对象,就好比是同一个人的两个称谓一样!"equals"比较的是对象的内容是否相等!多用于比较字符串! 
    希望可以帮到你更好的理解两者的区别! 支持!!!
      

  8.   

    呵呵,3楼说的有道理
    不过其实在Object类中,==和equals都是比较地址的
    String类重写了equals,让equals方法变成比较内容