我将这段代码包含在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");


xmlModifiertempdocliquidity有一定影响-因此,注释掉后,您看不到这种影响。

我的猜测是该方法会修改tempdoc然后返回它,并且您期望它返回一个副本。 Java中的对象无法那样工作。实际上,它根本不会修改tempdoc-它会修改tempdoc值所引用的对象。如果该方法返回对同一个对象的引用,则不会创建新对象-只是意味着您对一个对象有两个引用,例如两张纸上都带有相同的内部地址。

07-26 02:03