在Java中将对象引用保存为十六进制数字?

时间:2016-02-25 12:12:32

标签: java memory reference

我有兴趣将类的Object引用存储为十六进制数。 我只能存储为String。

public class Name{
  static void main(String [] args){
    Name name = new Name();
    String ref=name.toString();
    System.out.println(ref);
  }
}

这种情况下的结果将是Name @ HEXVALUE,我可以得到拆分字符串和解析的值。这是对象的正确和完整引用(Name只是JVM的一个信息吗?)?

如何保存为十六进制值?

1 个答案:

答案 0 :(得分:1)

你不能可靠地做到这一点,不应该尝试。

为什么你不能:toString()hashCode()这样的方法不是(并且从未有过)旨在提供此信息。它们可以被覆盖(以提供不同的信息,对于它们的预期目的更有用),并且甚至在它们的Object类的默认实现在Java语言的较新版本中发生变化时也是令人愤慨的。所以提出的想法都不可靠。

为什么你不应该尝试: 运行两次的相同程序可能会为同一个变量获得两个不同的十六进制值,因此您永远不应该尝试将此信息存储在磁盘上,或者存储在持续时间超过进程本身的任何介质上。我的意思是,一旦过程消失,信息就没用了。

如果想要将信息“存储”在当前进程的变量中,它已经存储在引用变量本身中(在您的示例中为name)。您可以将两个引用与==进行比较,并且实际上没有任何人可以希望使用引用(至少我无法想到)。

这引出了我的问题:这样做的原因是什么?