Java内存管理之谜

时间:2013-12-03 18:34:39

标签: java xml memory-management

我在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;
}

只需打印" test",即dosomething方法不会修改test引用的对象。是否存在不是这种情况的情况?

1 个答案:

答案 0 :(得分:1)

大概是声明:

xmlModifier.setMacro(tempdoc, liquidity, "liquidity");

xmlModifiertempdocliquidity产生了一些影响 - 因此,如果注释掉,您就看不到这种效果了。

我的猜测是方法修改tempdoc然后返回它,你希望它返回一个副本。 Java中的对象不能以这种方式工作。实际上,它根本不会修改tempdoc - 它会修改tempdoc的值所引用的对象。如果该方法返回对同一对象的引用,则不会创建新对象 - 它只是意味着您有两个对象引用,例如两张纸,每个对象都有相同的房屋地址。