JAVA中字符串问题。

来源:百度知道 编辑:UC知道 时间:2024/09/22 20:28:59
java里字符串str1和字符串str2,在str1.equals(str2)为true的情况下,str1.hashCode()和str2.hashCode()的值也相同,请问这是怎么做到的,我能不用于其他的类?
重写hashCode固然可以解决问题,但是java.lang.String类为什么没有重写hashCode呢? 我是在使用hashMap时碰到的情况,我如何在保证能在判断出key1.equals(key)==true的情况下,就把value1从map中取出?当key1和key是字符串时为什么就可以?

equal比较的是两个是不是同一个对象。如果返回true,那就是同一个对象,由同一个对象得到的hash值肯定是一样的。

我面试遇到过这类问题 equals和“==” 总是成对出现的 都是比较对象
前者比较的对象 后者比较的是对象的内存地址

至于 hashCode方法 hashCode就好比 你对象的身份证 一个类的身份证算法可能不同 因此 你对比自己的类时 你可能会继承equals 续写自己要用的对比的方法 这时一定要复写 hashCode() 不然可能产生错误

这个题有个最简单的办法可以解决:
只是变量赋值的过程,最开始学JAVA语言时学到的
老师还经常提到过这样的问题

举个最简单的例子:
String str1=new String("my new String");
String str2=str1;

然后,用str1.equal(str2)比较为true
str1.hashCode()与str2.hashCode()也相同

就可以这样实现要做的这个工作,因为这存在一个对象给另一个对象引用,这里的引用,是对地址的引用!引用同一个地址,当然值也就相同了!

顶 chenyamin51 楼
java中相同的基本数据类型变量的值地址相同啊