我在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引用的对象。是否存在不是这种情况的情况?
答案 0 :(得分:1)
大概是声明:
xmlModifier.setMacro(tempdoc, liquidity, "liquidity");
对xmlModifier
,tempdoc
或liquidity
产生了一些影响 - 因此,如果注释掉,您就看不到这种效果了。
我的猜测是方法修改tempdoc
然后返回它,你希望它返回一个副本。 Java中的对象不能以这种方式工作。实际上,它根本不会修改tempdoc
- 它会修改tempdoc
的值所引用的对象。如果该方法返回对同一对象的引用,则不会创建新对象 - 它只是意味着您有两个对象引用,例如两张纸,每个对象都有相同的房屋地址。