java - 在 java 中传递对象时到底发生了什么?

标签 java object hashcode hash-code-uniqueness

我知道当我们传递对象时,我们将其引用作为值传递。但是你得到的这个值是使用 hashcode() 方法对的(根据我的测试是一样的)?由于hashcode()不是内存地址,不保证每次取值都是唯一的,会不会在传递对象时发生碰撞等奇怪的事情?

(假设 hashcode() 没有被覆盖,即它返回与 System.identityHashCode() 相同的值)

有很多这样的问题,但我找不到相关资源来讨论传递的值是什么以及如何获得它?

编辑: 这是我的测试。默认的toSting()使用了里面的hashCode(),并将其转换为十六进制值。那么当我们传递对象时,传递的是这个值吗?或者 Java 是如何跟踪所有对象(被传递的)从而避免任何引用冲突

Object o = new Object();
System.out.println(o);
System.out.println(o.toString()); //both prints same thing - java.lang.Object@10385c1

最佳答案

hashcode() 不以任何方式涉及 Java 的内部内存存储。它只是一个应该返回可以表示对象的唯一值的方法。

现在,碰巧获得表示对象的唯一值的一种好方法是使用其内部内存地址。这就是 hashcode() 的默认实现所做的。但是 hashcode() 使用 内存地址的事实意味着hashcode() 定义内存地址。

关于java - 在 java 中传递对象时到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060723/

相关文章:

c# - 关于如何正确覆盖 object.GetHashCode() 的一般建议和指南

java - 本地主机、开发和生产的 Spring 数据源配置

c# - 我可以使用 GetHashCode() 进行所有字符串比较吗?

java - 滚动后 ListView 项目保持突出显示

java - 创建对象与读取 Json

java - 从 Object 类的对象访问整数

javascript - 如果对象值为 true 并且键在数组中,则获取对象键。 JavaScript

java - 覆盖父类(super class) Equals 和 HashCode 并认为我应该对子类做同样的事情

java - Android - 从 url 下载 JSON 文件

java - 为什么我需要在 fireTableRowsInserted() 之前调用 getRowSorter().modelStructureChanged()