额。。。。老师好像讲错了,老师说:“new出来的两个对象hashcode一定不相同”,可是,new出两个的String类型的相同字符串,它们的hashcode是相同的呀。。。。。。
你们聊到哪去了。。。 new出两个的String类型的相同字符串,它们的hashcode是相同的原因是,String.class中重写了hashcode方法啊。。。。
第二点呢...每个人的知识都有漏洞吧,我不知道“字符串本身就是hashcode”,java应用hash算法是为了方便检索内存里的东西。这个暂且不说。你提的问题“两个相同值得String类型对象得到的hashcode是一样得”。这个呢,下面截图有,第一张是jdk的官方文档,虽然是汉化版的。我所说的一样是指字符串对象(s1,s2)引用调用hashcode()方法返回的值是一样的。而第一张截图上说了,返回的是此对象的哈希码值。自然就是String对象的哈希码值,也即是堆中存储的String对象的哈希码值。不是你说的String值得哈希码。够清楚的吧...第三点,慎用网络用语:“呵呵”,“逗逼”,对陌生人用,这就是骂人的话,而不是调侃。还有什么疑问欢迎提出...
再看看这个
如果是String类型的 要通过调用字节数组 显示 字符串的hashcode
大哥 我还是没理解 你最后的那句话 “两个相同值得String类型对象得到的hashcode是一样得.” 就话的hashcode 指的是那种hashcode ;你这就话有两种hashcode 第一种是对象指向的对象的值的地址的hashcode ;第二种是对象指的hashcode。 你以前说的hashcode是第一种 我也知道String是类 但String也是基本数据类型 字符串本身就是hashcode
可是,new出两个的String类型的相同字符串,它们的hashcode是相同的呀。。。。。。 这只是你的理解而已 老师并没有说这就话 如果老师说这句话 那它重写hashcode() 就行 干嘛重写equals()判断对象的值是否相同
写个hashcode()判断他们引用的地址就行了呀!对不对 别一天天的说 源代码源代码 你看了就真的以为你把源代码理解了? 还是好好想想老师为社么这样写
老师的意思是 对象的值的哈希码相同 属性的值 值 值呀 哥哥呀 字符串本来就是用哈希码表示的的呀 老师前面说的第一个哈希码表示的是 对象的引用地址呀 第二个哈希码说的是对象引用地址里面对应的属性(字符串)的哈希码 你确定你真的了解引用传递么 栈空间里面放的是对象 堆空间里面才是属性 栈空间里的哈希码只是表示地址 而堆空间的哈希码才是表示真正的值 就算你看再多的源代码 理解能力差 又有什么用呢?
还是自己来回答吧:查了下资料,new出来的两个对象正常情况是不相同的,但如果超出了int类型的范围,那么就至少有两相同。那么问题来了,new两个相同的字符串对象为什么他们的hashcode相同呢,这要看String类型的源码了,源码的意思基本上就是比较String对象的value值,值相同就相同。回过头去,不是说new出来的两个对象哈希值不相同吗,额......感觉都是在扯淡,没见官方文档说new出来的两个对象hashcode就一定相等啊。
后面的一种,不信你可以试试。。。
String s="abc"这种还是String s=new String("abc")