0

I know that we cannot change the reference passed to a function such as

void fun(dog a){
 a=null;
}

After executing the function

main(String[] args){

 dog a=new dog();
 fun(a);
}

the dog a is not changed. So I was wondering how can we change the reference a to null inside a function

4

3 回答 3

1

你不能。你能做的最接近的事情是

 Dog fun(Dog a) {
   return null;
 }

 public static void main(String[] args){
   Dog a = new Dog();
   a = fun(a);
 }

(除其他外,这种限制可以减少“远处的诡异动作”——例如,局部变量引用只能作为显式赋值的结果而改变。)

于 2012-11-02T20:46:11.967 回答
1

Java 是按值传递,其中传递引用的,因此新的引用值将作为参数传递。当此引用指向方法内的新对象时,引用的更改不会反映在方法外的对象上。

您可能需要执行以下操作来对null.

Object fun(){
 return null;
}


main(String[] args){

 dog a=new dog();
 a=fun();
}
于 2012-11-02T20:46:31.337 回答
0

Java 严格来说是一种按值传递的语言(有关详细信息,请参阅此内容)。简而言之,这意味着,当您将对象引用传递给方法时,会为该方法创建引用的副本。因此,您为使函数中的引用无效所做的任何事情都只是使引用变量的本地副本无效,而它所指向的对象仍保留在内存中,安全无虞。

我想一个简单的类比就像有两条平行的街道通向同一栋建筑。您可以摧毁其中一条道路,但这对建筑物或另一条道路没有影响。

于 2012-11-02T20:47:40.593 回答