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