由于某些原因,我试图复制/克隆对象实例。在String的情况下,我尝试了以下操作:
我确实有一个类似
的对象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!");
}
我很惊讶这实际上匹配并抛出一个错误。也许有人可以解释我的原因。
答案 0 :(得分:0)
我发现了:-)
即使我将它与==而不是等于进行比较,字符串也是相同的。之所以如此,是因为toString()
中使用的String.java
类的String.valueOf(Object obj)
方法是这样实现的:
public String toString() {
return this;
}
要成功复制字符串,请使用:
return new String(((String)originalMemberData).toCharArray());