我有这段代码的Java程序的静态方法中: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不会修改测试引用的对象。有没有情况下,情况并非如此?
你是什么意思,当你说“我得到不同的结果”?你期望什么结果?你会得到什么结果? – neutrino
这意味着在twu情况下xml文档tempdoc1是不同的(setMacro方法实际上修改了树的一部分) – splinter123