Java 使用另一个对象的toString结果构造一个新对象()

Java 使用另一个对象的toString结果构造一个新对象(),java,object,memory-management,object-to-string,Java,Object,Memory Management,Object To String,我想知道是否有可能获得某个对象的字符串值,以便通过该特定字符串访问同一台机器(同一RAM)或同一个VM上的该对象 e、 g 我希望你能理解我想要理解的 编辑:我在 一个类,允许我获取(VM?)内存中实例的逻辑地址字符串:sun.misc.Unsafe 我想我也可以使用不安全的方法从(限于VM?)内存中检索对象 如果不可能这样,我该怎么做呢?既然出于好奇,还有其他语言(特别是高端语言)允许这样的直接内存访问吗?绝对没有。事实上,这显然是不可能的,因为显然可以有两个不同的对象,它们的toStrin

我想知道是否有可能获得某个对象的字符串值,以便通过该特定字符串访问同一台机器(同一RAM)或同一个VM上的该对象

e、 g

我希望你能理解我想要理解的

编辑:我在

一个类,允许我获取(VM?)内存中实例的逻辑地址字符串:
sun.misc.Unsafe

我想我也可以使用不安全的方法从(限于VM?)内存中检索对象


如果不可能这样,我该怎么做呢?既然出于好奇,还有其他语言(特别是高端语言)允许这样的直接内存访问吗?

绝对没有。事实上,这显然是不可能的,因为显然可以有两个不同的对象,它们的
toString()
方法返回相同的字符串。举个简单的例子:

Integer a = new Integer(10);
Integer b = new Integer(10);

Object x = Object.buildFromToString("10");
x
应该参考什么?
a
引用的同一对象,还是
b
引用的同一对象

toString()
不是用来返回对象标识符的,它只是用来返回对象的某种文本表示形式。仅仅因为默认实现返回了一些看起来有点像标识符的东西,就不应该将其视为应该用作标识符的指示


如果您想在其他时间点存储访问对象的某种方式,我建议您将对它的引用存储为
对象
变量。

不,这是不可能的。Java对象只有在引用这些对象时才可访问。您可以做的是将对象存储在一个给定名称下的
映射中,并使用映射从其名称中获取对象的引用。

假设在
toString()
结果中看到的数字是内存地址是不正确的。


实际上,它是对象的哈希代码。如果不修改对象,则其哈希代码保持不变。但是,它的内存地址可以随时更改:压缩垃圾收集器可以随时决定在内存中移动对象。

+1:多个对象可以具有相同的哈希代码。即使对于
System.identityHashCode(Object)
谢谢,我也不认为它是地址。我想知道一些哈希代码是否是唯一的,如果是,是否可以从另一个单独的项目中检索。你回答并放弃了这种可能性,但我仍然想知道如何做到这一点。我对我的问题做了很多编辑,因为我有很多关于toString的答案。那么什么是对象标识符呢?哈希代码也不是唯一的,对吗?我编辑了很多问题,因为我有很多关于toString的答案。@sinekonata:答案集中在
toString()
,因为问题是:)我不知道如何在一些文本表示中获得有用的对象标识符-最简单的方法就是在代码中保留对对象的引用。如果您想。。。但不清楚你想要实现什么。我只是想做机器能做的事情,即读取对象的地址,并告诉机器使用给定的地址构造另一个对象。如前所述,这只是出于好奇。类sun.misc.Unsafe似乎能够进行硬件操作,我想知道是否有比直接访问内存更简单的方法。@sinekonata:在Java中,您不应该这样做-它是一种托管语言。虚拟机能够在内存中移动对象并为您做各种事情,这正是因为您自己不会弄乱内部结构。
Integer a = new Integer(10);
Integer b = new Integer(10);

Object x = Object.buildFromToString("10");