为了账号安全,请及时绑定邮箱和手机立即绑定

老师讲的内容好像错了

额。。。。老师好像讲错了,老师说:“new出来的两个对象hashcode一定不相同”,可是,new出两个的String类型的相同字符串,它们的hashcode是相同的呀。。。。。。

正在回答

10 回答

你们聊到哪去了。。。 new出两个的String类型的相同字符串,它们的hashcode是相同的原因是,String.class中重写了hashcode方法啊。。。。

0 回复 有任何疑惑可以回复我~
#1

黑夜_K

哈哈。。
2017-10-14 回复 有任何疑惑可以回复我~

第二点呢...每个人的知识都有漏洞吧,我不知道“字符串本身就是hashcode”,java应用hash算法是为了方便检索内存里的东西。这个暂且不说。你提的问题“两个相同值得String类型对象得到的hashcode是一样得”。这个呢,下面截图有,第一张是jdk的官方文档,虽然是汉化版的。我所说的一样是指字符串对象(s1,s2)引用调用hashcode()方法返回的值是一样的。而第一张截图上说了,返回的是此对象的哈希码值。自然就是String对象的哈希码值,也即是堆中存储的String对象的哈希码值。不是你说的String值得哈希码。够清楚的吧...第三点,慎用网络用语:“呵呵”,“逗逼”,对陌生人用,这就是骂人的话,而不是调侃。还有什么疑问欢迎提出...

574c800e0001313b05000202.jpg

574c800e000170cb05000382.jpg


1 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//574c29110001133712900462.jpg再看看这个

0 回复 有任何疑惑可以回复我~
#1

沉寂的蜗牛 提问者

基本数据类型就只有八个,数值型:byte,short,int,long,浮点型:float,double,字符型:char,布尔型:boolean。所以呢?String不是基本数据类型,而是引用类型,只是代表一个类,不过因为常量池的存在经常会误以为它是基本数据类型。这是第一点...
2016-05-31 回复 有任何疑惑可以回复我~
#2

沉寂的蜗牛 提问者

那个A类是这样的。new String()相当于创建一个空字符串,API上说了,使用hashcode()得到的数据为0;第二条没问题;第三条b这个引用变量指向的是null,输出来的自然是null了;你这是什么编译器?第四条的代码对应了第五条的输出了,“0”的hashcode是48.;第五条代码,既然c这个引用变量都不指向堆内存空间了,也就是说根本没有对象。而hashcode()返回的是对象的哈希码...不是一个String对象还用String类的方法当然报空指针异常了。
2016-05-31 回复 有任何疑惑可以回复我~
#3

mjka5632 回复 沉寂的蜗牛 提问者

太牛了!看完之后,感觉你们好厉害!崇拜
2016-08-11 回复 有任何疑惑可以回复我~

如果是String类型的  要通过调用字节数组     显示 字符串的hashcode 

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//574c1afe00016f8509140266.jpg大哥  我还是没理解  你最后的那句话  “两个相同值得String类型对象得到的hashcode是一样得.”  就话的hashcode  指的是那种hashcode  ;你这就话有两种hashcode    第一种是对象指向的对象的值的地址的hashcode   ;第二种是对象指的hashcode。  你以前说的hashcode是第一种  我也知道String是类  但String也是基本数据类型   字符串本身就是hashcode  

0 回复 有任何疑惑可以回复我~

可是,new出两个的String类型的相同字符串,它们的hashcode是相同的呀。。。。。。    这只是你的理解而已  老师并没有说这就话  如果老师说这句话 那它重写hashcode()  就行  干嘛重写equals()判断对象的值是否相同

写个hashcode()判断他们引用的地址就行了呀!对不对    别一天天的说 源代码源代码 你看了就真的以为你把源代码理解了?  还是好好想想老师为社么这样写

0 回复 有任何疑惑可以回复我~
#1

沉寂的蜗牛 提问者

哎...网上聊天就这不好,我不懂你的意思,你也不明白我的想法,特容易聊出情绪。平复一下...
2016-05-30 回复 有任何疑惑可以回复我~
#2

沉寂的蜗牛 提问者

这视频去年看了,早忘了。好了,我不说老师讲错了。回到最初的问题,“new出两个的String类型的相同字符串,它们的hashcode是相同的,为什么?”。“hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值”这是百度百科里的解释。老师说的“new出来的两个对象hashcode一定不相同”这个可能是hash算法针对对象地址编写的hashcode。因为new出来的两个对象在堆内存中地址确实不一样,只要不超过int表示范围,可能就真的是一定不相同的。
2016-05-30 回复 有任何疑惑可以回复我~
#3

沉寂的蜗牛 提问者

但是呢...hash算法对String类型的对象和int类型的编写hashcode是不同于地址编写的。上次跟你说的源码也正是hashcode()方法对Stirng类型对象的处理方式,它基本上是根据String类型的值去编写的。所以,两个相同值得String类型对象得到的hashcode是一样得...说的还算清楚吧。
2016-05-30 回复 有任何疑惑可以回复我~
#4

沉寂的蜗牛 提问者

额...表达有漏字,你根据上下文脑补一下,应该不困难
2016-05-30 回复 有任何疑惑可以回复我~
#5

小小徐life 回复 沉寂的蜗牛 提问者

大哥 我还是没理解 你最后的那句话 “两个相同值得String类型对象得到的hashcode是一样得.” 这句话的hashcode 指的是哪种hashcode ? 你这句话有两种hashcode 第一种是对象指向的对象的值的地址的hashcode ;第二种是对象值的hashcode。 你以前说的hashcode是第一种 我也知道String是类 但String也是基本数据类型 字符串本身就是hashcode
2016-05-30 回复 有任何疑惑可以回复我~
查看4条回复

老师的意思是 对象的值的哈希码相同  属性的值  值  值呀  哥哥呀 字符串本来就是用哈希码表示的的呀     老师前面说的第一个哈希码表示的是 对象的引用地址呀   第二个哈希码说的是对象引用地址里面对应的属性(字符串)的哈希码  你确定你真的了解引用传递么  栈空间里面放的是对象  堆空间里面才是属性  栈空间里的哈希码只是表示地址  而堆空间的哈希码才是表示真正的值  就算你看再多的源代码 理解能力差  又有什么用呢?

1 回复 有任何疑惑可以回复我~

还是自己来回答吧:查了下资料,new出来的两个对象正常情况是不相同的,但如果超出了int类型的范围,那么就至少有两相同。那么问题来了,new两个相同的字符串对象为什么他们的hashcode相同呢,这要看String类型的源码了,源码的意思基本上就是比较String对象的value值,值相同就相同。回过头去,不是说new出来的两个对象哈希值不相同吗,额......感觉都是在扯淡,没见官方文档说new出来的两个对象hashcode就一定相等啊。

0 回复 有任何疑惑可以回复我~

后面的一种,不信你可以试试。。。

0 回复 有任何疑惑可以回复我~
#1

小小徐life

你逗比呀大哥 new出来的是对象呀 它的哈希码值代表栈空间指向堆空间的地址 又不是代表字符串 new都没搞懂 你还是好好看看基础吧
2016-05-26 回复 有任何疑惑可以回复我~
#2

沉寂的蜗牛 提问者 回复 小小徐life

哈希吗值代表对象引用的地址。比如String s1=new String("abc");s1.hashcode()就表示这个地址。然后,哈希吗值不是代表字符串。什么东西呀,谁说代表字符串了。new都没搞懂,你还是好好看看基础吧。额。。。我建议你先看清我提的问题,然后呢,再亲自写代码试一下,最后呢,看一下字符串的hashcode()方法的源码。。。最后的最后再提示一句:字符串也是对象。
2016-05-29 回复 有任何疑惑可以回复我~
#3

小小徐life 回复 沉寂的蜗牛 提问者

大哥 我想问你 你能new出两个相同的对象吗? 人家老师的意思 new出来的两个对象hashcode一定不相同 说的是栈区对象指向堆区属性的哈希码值一定不相同 也就是你说的应用传递的地址所代表的哈希码不同
2016-05-29 回复 有任何疑惑可以回复我~
#4

小小徐life 回复 沉寂的蜗牛 提问者

还有 老师什么时候说了这句话 可是,new出两个的String类型的相同字符串,它们的hashcode是相同的呀。。。。。。
2016-05-29 回复 有任何疑惑可以回复我~
查看1条回复

String s="abc"这种还是String s=new String("abc")

0 回复 有任何疑惑可以回复我~
#1

沉寂的蜗牛 提问者

后面的一种,不信你可以试试。。。
2015-12-23 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师讲的内容好像错了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信