在Java中将对象引用另存为十六进制数?
我感兴趣的是将类的对象引用存储为十六进制数。 我只能存储为字符串在Java中将对象引用另存为十六进制数?,java,memory,reference,Java,Memory,Reference,我感兴趣的是将类的对象引用存储为十六进制数。 我只能存储为字符串 public class Name{ static void main(String [] args){ Name name = new Name(); String ref=name.toString(); System.out.println(ref); } } 这种情况下的结果将是Name@HEXVALUE,我可以通过拆分字符串和解析得到值。这是该对象的正确且完整的引用吗(名称只是JVM的一
public class Name{
static void main(String [] args){
Name name = new Name();
String ref=name.toString();
System.out.println(ref);
}
}
这种情况下的结果将是Name@HEXVALUE,我可以通过拆分字符串和解析得到值。这是该对象的正确且完整的引用吗(名称只是JVM的一个信息?)
如何保存为十六进制值?您不能可靠地执行此操作,也不应该尝试 为什么不能: 像
toString()
或hashCode()
这样的方法不是(也从来没有)打算提供此信息。它们可以被重写(以提供不同的信息,对它们的预期用途更有用),而且在较新版本的Java语言中,它们的对象
类的默认实现发生了变化,这甚至不会让人感到愤怒。因此,所有提出的想法都不可靠
您不应该尝试的原因:
同一个程序运行两次可能会为同一个变量获得两个不同的十六进制值,因此您不应尝试将此信息存储在磁盘上,或存储在任何比进程本身更持久的介质上。我的意思是,一旦过程结束,信息就没用了
如果想法是在当前过程中“存储”变量中的信息,那么它已经存储在引用变量本身中(name
)。您可以将两个引用与==
进行比较,实际上任何人都不希望对引用做任何事情(至少我想不出任何事情)
这就引出了一个问题:这样做的原因是什么?中的十六进制值
Name@hexvalue
只是散列码。它不一定是“此对象的正确和完整引用”。String.format(“%x”,ref.hashCode())
。请注意,如果Name
覆盖toString()
,则“拆分和解析”将中断。可能的类似问题:您对此感兴趣:Integer.tohextstring(System.identityHashCode(new object()))
?