【发布时间】:2014-09-15 21:46:41
【问题描述】:
我知道有几篇文章解释了 Java 中的参数传递。我也知道参数是按值传递的,但值是对对象的引用。假设我有以下 2 个方法。
public void append(List<String> list){
list.add("some string");
}
public void incr(int count){
count++;
}
如果我调用第一个方法,对象list 会被修改,并且在方法调用之后修改的值也存在。但是当我调用incr(count)时,一旦方法调用返回,count的修改值就会丢失。
为什么在某些情况下,值会被修改,而在其他情况下却没有?
【问题讨论】:
-
list是一个引用,指的是一个存在于参数列表之外的 List 对象。count是值,不是引用,它的值只存在于参数列表中。 -
count++ 等价于 count = count + 1。它为
count变量分配一个新值。第一个 sn-p 不会将新列表分配给list变量。它只修改列表对象的内容。 -
例如,您不能通过
list = someOtherList;更改调用者引用的 List 对象。 -
尼克:你在做两件不同的事情。
count++表示count = count + 1。您正在重新分配count。尝试在其他方法中执行相同操作:list = new ArrayList<String>()。该新列表将仅存在于该方法中,原始列表不会被修改。 -
"但是值是对对象的引用如果参数是引用类型(即它引用一个对象)"
标签: java argument-passing