equals是比对两个对象是否相同,而==则是看两个字符串是否为同一内存地址。new String("");给变量附值时在内存中其实是重新开辟了一快空间放这个新的字符串。如:
String str1 = new String("hello");
String str2 = str1; //将str1附给一个新的String,它们的内存地址是相同的
String str3 = new String("hello");用equals来比对这三个字符串,结果都会为true
用==的话str1和str2为true,str1和str3为false,str2和str3为false<------ 树欲静而风不止 ------>

解决方案 »

  1.   

    在java中,对象名实际上是指向该对象的引用。
      

  2.   

    在Java中,变量分为基本型,对象型,像int,float叫基本类型,而String是个比较奇怪的类型,事实上它是对象型,但在传值的时候又采用了基本型的“传值”,所以你比较这个字符串本身是否相等,一定要用equals(),这在对象比较时适用,==用来判断这两个Stack中存放的东西是否相同,基本型存放在Stack中,所以用==是可以的,而把对象型拿来比较的话,Stack中存放的是对象在Heap中的存放地址,两个不同的变量当然存放地址是不相等的!
      

  3.   

    在Java中,变量分为基本型,对象型,像int,float叫基本类型,而String是个比较奇怪的类型,事实上它是对象型,但在传值的时候又采用了基本型的“传值”,所以你比较这个字符串本身是否相等,一定要用equals(),这在对象比较时适用,==用来判断这两个Stack中存放的东西是否相同,基本型存放在Stack中,所以用==是可以的,而把对象型拿来比较的话,Stack中存放的是对象在Heap中的存放地址,两个不同的变量当然存放地址是不相等的!