java字符串与==方法的比较

时间:2013-04-06 16:11:18

标签: java

public class TestDoubleEqualString {

/**
 * @param args
 */
public static void main(String[] args) {


    String s1=new String("abc");
    String s2=new String("abc");


    System.out.println(s1.hashCode());
    System.out.println(s2.hashCode());



    System.out.println(s1==s2);

    System.out.println(s1.equals(s2));


}

}

//虽然我的s1.hashcode()和s2.hashCode()返回相同的值,但为什么s1 == s2为false .....

提前致谢

2 个答案:

答案 0 :(得分:1)

s1 == s2为false,因为==正在比较字符串引用,即使两个字符串的内容相同,字符串引用也不同。要检查字符串内容,请使用s1.equals(s2)

  

虽然我的s1.hashcode()s2.hashCode()返回相同的值,但为什么s1==s2为false

除了使用==之外,这种逻辑完全有缺陷。当两个字符串具有相同的哈希码时,不可能从中得出结论它们是否由相同的字符序列组成(或者实际上是相同的对象)。

答案 1 :(得分:1)

NPE已经回答了这个问题,但只是为了澄清 - 字符串是对象 - ==说'这是同一个对象',而字符串对象的.equals方法正在比较对象内的文字。