如何获取字符串对象的参考值?
如果我有像
这样的课程class T()
{
}
T t = new T();
System.out.println( t);
打印出T @ a3455467,这是t
中的参考值但是对于字符串?也许用方法hashCode()??
答案 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.toString
为t
引用的对象返回的值。 (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 )
是另一种方法。