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

wingardium 2010-03-26 03:47:59
能否定义两个字符串s1和s2对象,使得以下结论同时成立:
1. s1.equals(s2) 得到的结果是false
2. s1.hashCode() == s2.hashCode() 得到的结果是true
...全文
180 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingardium 2010-03-26
  • 打赏
  • 举报
回复
难得有个明白人,呵呵!我的答案更加简单 str1="", str2="\u0000"
nickycheng 2010-03-26
  • 打赏
  • 举报
回复
这样的字符串太多了。举个例子

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


Ark032425 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ivorytower 的回复:]
不能否认存在这种情况的可能性
[/Quote]
可以的。建议保持一致
longtenggdf 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]
楼上的方法太.....

不可能的,本来是可以通过重写他的hashCode 和 equalse 方法来实现的。但是String 是final 类。这两个方法都不能被重写了。
py330316117 2010-03-26
  • 打赏
  • 举报
回复
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个地址相等
若鱼1919 2010-03-26
  • 打赏
  • 举报
回复
String重写了equals和hashCode,因此,不可能
sharke118 2010-03-26
  • 打赏
  • 举报
回复
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同
上面说的对象相同指的是用eqauls方法比较。
  • 打赏
  • 举报
回复
不能否认存在这种情况的可能性
knightzhuwei 2010-03-26
  • 打赏
  • 举报
回复
不能否认存在这种情况的可能性
或者说肯定存在s1、s2满足条件 但是想找出来具体的s1、s2应该是不可能的

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧