java系统。identityHashCode在字符串实例上是相等的
由于种种原因,我试图复制/克隆对象的实例。在弦的例子中,我尝试了这样的方法:
我确实有一个像
class Foo{
private String test;
//Getters && Setters are generated
}
还有一种复制方法,比如:
private static Object copyMemberData(Object originalMemberData) {
if (originalMemberData == null) {
return null;
}
...
if (originalMemberData instanceof String) {
return String.valueOf(originalMemberData);
}
...
}
它的用法是
PropertyDescriptor propDesc = new PropertyDescriptor("test", Foo.class);
//Get Data from original object
final Object originalMemberData = propDesc.getReadMethod().invoke(originalFoo);
final Object copiedMemberData = copyMemberData(originalMemberData);
之后,我试着将结果与System.identityHashCode
进行比较,以确保我没有处理引用
if (System.identityHashCode(copiedMemberData) == System.identityHashCode(originalMemberData)) {
throw new RuntimeException("Cloning is buggy!");
}
令我惊讶的是,这竟然匹配了我,并给了我一个错误。也许有人能解释一下原因
# 1 楼答案
我发现了:-)
即使我将字符串与==而不是equals进行比较,它也是相同的。这种情况是因为
String.valueOf(Object obj)
中使用的String.java
类的toString()
方法实现如下:要成功复制字符串,请使用: