ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java new运算符和hashcode()

2019-07-26 00:03:55  阅读:218  来源: 互联网

标签:java hashcode new-operator


首先,我在这里谈论默认的hashCode()方法而不是覆盖的东西.
当我们创建一个新对象时,’new’运算符返回它创建的对象的内存地址;在java中我们说它更普遍地返回引用.我想知道的是,这是否与hashCode()返回的值相同?

我相信他们是一样的.但话说回来,当我们有超过2 ^ 32个对象并且给定hashCode()返回一个整数(2 ^ 32个不同的数字)时,将会发生全部碰撞,当我们传递对象时,这将是一个真正的混乱. JVM如何处理?

解决方法:

When we create a new object, ‘new’ operator returns the memory address of that object it creates; which in java we say it returns reference more generally.

好吧,参考当然不一定是地址.这是一种引用对象的方式 – 位的确切值取决于JVM实现.

What I want to know is, is this the same as the value returned by the hashCode()?

不必要.你当然不应该试图在这方面作出任何假设.再次,它是一个实现细节.

值得记住的是,虽然垃圾收集器可以在内存中移动对象(随着更新引用),但哈希代码不能基于此更改,这是针对您的建议的参数.

But then again, when we have more than 2^32 objects and given hashCode() returns an integer (2^32 different numbers) there will be collisions all over and when we pass objects it would be a real mess.

会有哈希码冲突,是的.这是不可避免的 – 任何使用哈希码的东西都需要考虑碰撞的可能性.虽然不存在引用冲突 – 一个能够同时支持超过232个值的JVM,但不能只使哈希码和引用具有相同的值.

标签:java,hashcode,new-operator
来源: https://codeday.me/bug/20190725/1538486.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有