若两个字符串文本和字符串对象的哈希代码在java中是相同的,那个么若它们通过==进行比较,那个么会发现false。为什么?

若两个字符串文本和字符串对象的哈希代码在java中是相同的,那个么若它们通过==进行比较,那个么会发现false。为什么?,java,string,Java,String,在下面的代码中,s1和s3的哈希代码相等,但s1==s3返回false为什么?请澄清。 这里s1、s2和s3包含相同的内容和哈希代码。 当在代码下面运行时,则为out 108274800 108274800 108274800 s1==s2 s1.等于(s2) s1.等于(s3) 代码如下所示 公共类字符串测试{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated m

在下面的代码中,s1和s3的哈希代码相等,但s1==s3返回false为什么?请澄清。 这里s1、s2和s3包含相同的内容和哈希代码。 当在代码下面运行时,则为out

108274800

108274800

108274800

s1==s2

s1.等于(s2)

s1.等于(s3)

代码如下所示

公共类字符串测试{

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

String s1="rahul";
String s2="rahul";
String s3=new String("rahul");
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());

if(s1==s2){

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

if(s1==s3){

    System.out.println("s1==s3");
}

if(s1.equals(s2)){

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

if(s1.equals(s3)){

    System.out.println("s1.equals(s3)");
}

}

}

==只比较引用类型,要比较对象或字符串,你必须使用
s1。equals(s2)

,因为它是一个新的字符串对象,并且
=
比较引用。就像以前无数次问过的那样,伙计。只是一个加法,哈希契约说如果两个对象相等,必须有相同的哈希,但是对于两个不相等的字符串,散列也可以相同……我读了这一行,大约1000次;)你可能还想,他至少会读1次。hashcode和==之间的关系是什么。这是我的问题?请在此基础上提出建议。如果字符串相等,那么它们的hashcode也必须相等。事实并非如此。不同的字符串可能具有相同的哈希代码。可能的字符串的数量远远大于可能的哈希代码的数量,因此重复的哈希代码是不可避免的。