我将这段代码包含在Java程序的静态方法中:
import org.w3c.dom.Document;
...
Document tempdoc1=tempdoc;
//tempdoc1=xmlModifier.setMacro(tempdoc, liquidity, "liquidity"); // this slightly modifies the document
tempdoc1=null;
if (tempdoc1==null){
tempdoc1=tempdoc;
}
...do something with tempdoc1
我不明白的是以下内容:如果我删除注释“ //”,则从后续代码执行中得到不同的结果,而根据我的基本理解,它应该是完全相同的,因为无论如何在下一行重新定义变量tempdoc1!有人知道为什么吗?
编辑:我看不到xmlModifier类的静态方法setMacro如何修改tempdoc引用的对象。例如此代码
public static void main(String[] args) {
String test="test";
String test2=dosomething(test);
System.out.println(test);
}
public static String dosomething(String str){
str="mod";
return str;
}
简单地打印“测试”,即方法dosomething不会修改测试引用的对象。在某些情况下不是吗?
最佳答案
大概是这样的声明:
xmlModifier.setMacro(tempdoc, liquidity, "liquidity");
对
xmlModifier
或tempdoc
或liquidity
有一定影响-因此,注释掉后,您看不到这种影响。我的猜测是该方法会修改
tempdoc
然后返回它,并且您期望它返回一个副本。 Java中的对象无法那样工作。实际上,它根本不会修改tempdoc
-它会修改tempdoc
值所引用的对象。如果该方法返回对同一个对象的引用,则不会创建新对象-只是意味着您对一个对象有两个引用,例如两张纸上都带有相同的内部地址。