对于java来说,String的equals()方法比较的是字符串的内容,==比较的是内存地址值。
例如:
String s1="abc"+"def";
String s2=new String(s1);
if(s1.equals(s2)){ System.out.println(".equals succeeded"); }else{
}System.out.println(".equals failed");
输出结果为:
.equals succeeded
if(s1==s2) System.out.println("==succeeded"); else
System.out.println("==failed");
输出结果
==failed
由此可见,equals()方法比较的是字符串的内容,==比较的是内存地址值。
此处还有个其他的问题:
问:String s1="abc"; s2="abc"; s3= new String("abc");为啥s1和s2的地址值一样而s1和s3的就不一样呢?也就是,为什么 s1==s2但s1!=s3呢? 答:先是在内存里创建了一个abc字符串,然后s1指向abc,s2要指向abc,内存中已经有abc,所以s1和s2地址相同;s3指向的是新字符串abc的地址,所以s1与s3不同。 s1==s2但s1!=s3,因为s1,s2,s3是引用,比较的是地址而不是内容,所以有这个结果, 比较值是否相同应该用,equal函数而不能直接用==。