关于java.lang.String的equals和hashCode方法的问题

时间:2021-12-08 13:54:39
能否定义两个字符串s1和s2对象,使得以下结论同时成立:
1. s1.equals(s2) 得到的结果是false
2. s1.hashCode() == s2.hashCode() 得到的结果是true 

9 个解决方案

#1


不能否认存在这种情况的可能性
或者说肯定存在s1、s2满足条件 但是想找出来具体的s1、s2应该是不可能的

#2


不能否认存在这种情况的可能性

#3


1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同    
上面说的对象相同指的是用eqauls方法比较。

#4


String重写了equals和hashCode,因此,不可能

#5


public class and {
public static void main(String[] args){
String str1="1";
String str2;
str2="2";
System.out.println(str1.equals(str2));
str2=str1;
System.out.println(str1.hashCode()==str2.hashCode());
}
}

只能是上面的那样,如果是2个打印输出一起执行则不可能,因为你不能要求值相等而且地址还相等,那不就成了一个字符串了吗,所以你只能先通过赋值让值相等,在通过=号让2个地址相等

#6


引用 5 楼 py330316117 的回复:
Java code
public class and {
public static void main(String[] args){
    String str1="1";
    String str2;
    str2="2";
    System.out.println(str1.equals(str2));
    str2=str1;
    System.ou……

楼上的方法太.....

不可能的,本来是可以通过重写他的hashCode 和 equalse 方法来实现的。但是String 是final 类。这两个方法都不能被重写了。

#7


引用 2 楼 ivorytower 的回复:
不能否认存在这种情况的可能性

可以的。建议保持一致

#8


这样的字符串太多了。举个例子

System.out.println("|_".hashCode());
System.out.println("{~".hashCode());


        

#9


难得有个明白人,呵呵!我的答案更加简单 str1="", str2="\u0000"

#1


不能否认存在这种情况的可能性
或者说肯定存在s1、s2满足条件 但是想找出来具体的s1、s2应该是不可能的

#2


不能否认存在这种情况的可能性

#3


1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同    
上面说的对象相同指的是用eqauls方法比较。

#4


String重写了equals和hashCode,因此,不可能

#5


public class and {
public static void main(String[] args){
String str1="1";
String str2;
str2="2";
System.out.println(str1.equals(str2));
str2=str1;
System.out.println(str1.hashCode()==str2.hashCode());
}
}

只能是上面的那样,如果是2个打印输出一起执行则不可能,因为你不能要求值相等而且地址还相等,那不就成了一个字符串了吗,所以你只能先通过赋值让值相等,在通过=号让2个地址相等

#6


引用 5 楼 py330316117 的回复:
Java code
public class and {
public static void main(String[] args){
    String str1="1";
    String str2;
    str2="2";
    System.out.println(str1.equals(str2));
    str2=str1;
    System.ou……

楼上的方法太.....

不可能的,本来是可以通过重写他的hashCode 和 equalse 方法来实现的。但是String 是final 类。这两个方法都不能被重写了。

#7


引用 2 楼 ivorytower 的回复:
不能否认存在这种情况的可能性

可以的。建议保持一致

#8


这样的字符串太多了。举个例子

System.out.println("|_".hashCode());
System.out.println("{~".hashCode());


        

#9


难得有个明白人,呵呵!我的答案更加简单 str1="", str2="\u0000"