变量引用字符串的值

时间:2010-06-01 07:30:12

标签: java reference

如何获取字符串对象的参考值?

如果我有像

这样的课程
class T()
{
}
T t = new T();
System.out.println( t); 

打印出T @ a3455467,这是t

中的参考值

但是对于字符串?也许用方法hashCode()??

5 个答案:

答案 0 :(得分:5)

您想要的是系统标识哈希。你可以通过以下方式获得:

int id = System.identityHashCode(t);

Object.toString()的默认实现是:

public String toString() {
  return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Object.hashCode()默认实施是System.identityHashCode()

但是系统身份哈希代码也只是为同一个实例保持不变(甚至不是唯一的yet)。这不一定是参考值 - 无论这在jvm实现中是什么。 真正的参考值是不透明的,在java中并没有真正提供给公众。你不能将它转换为十六进制地址,并查看内存或类似的内容。

答案 1 :(得分:3)

  

打印出T @ a3455467,这是t

中的参考值

不,这不是t的参考值,只是Object.toStringt引用的对象返回的值。 (println - 方法的实现在给定参数上调用toString方法。)

如果你说,

String s = "hello world";

然后对字符串的引用存储在s中。 Java中没有办法(如C / C ++中那样)获取字符串的“地址”(或s的值)。

答案 2 :(得分:3)

来自API:

  

Object.toString()toString的{​​{1}}方法返回一个字符串,该字符串由对象为实例的类的名称组成,符号为class Object ,以及对象的哈希码的无符号十六进制表示。换句话说,此方法返回一个等于值的字符串:

@

是的,它只是你想要的 getClass().getName() + '@' + Integer.toHexString(hashCode())


那说,这不是“对象的参考值”。正如它所说的那样,它只是以十六进制表示的对象的哈希码。根据合同,Integer.toHexString(someString.hashCode()) String的不同实例将具有相同的equals。这也适用于其他类型。

答案 3 :(得分:1)

如果你的意思是参考值在一个对象的内存地址的意义上,这在Java中是没有意义的。在复制垃圾收集器的时代,对象的内存地址可以随时改变。此外,地址的大小取决于JVM主机平台/实现(32/64位,将来可能更多)。

答案 4 :(得分:0)

重载String.valueOf( t )是另一种方法。