gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:39 24 4
gpt4 key购买 nike

我知道当我们传递对象时,我们将其引用作为值传递。但是你得到的这个值是使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com