更改java中传递给函数的引用

时间:2012-11-02 20:44:38

标签: java

我知道我们无法更改传递给

等函数的引用
void fun(dog a){
 a=null;
}

执行功能

main(String[] args){

 dog a=new dog();
 fun(a);
}
狗a没有改变。 所以我想知道如何在函数

中将引用a更改为null

3 个答案:

答案 0 :(得分:1)

你做不到。你最接近的是

 Dog fun(Dog a) {
   return null;
 }

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

(除此之外,这种限制可以减少“远距离的怪异行为” - 例如,局部变量引用只能 作为显式赋值的结果而发生变化。)< / p>

答案 1 :(得分:1)

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

您可能需要执行以下操作,以便对null进行外部引用。

Object fun(){
 return null;
}


main(String[] args){

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

答案 2 :(得分:0)

Java严格来说是一种按值传递的语言(参见this for great info)。简而言之,这意味着,当您将对象引用传递给方法时,会为该方法创建引用的副本。因此,在函数中使引用无效的任何操作都只是使引用变量的LOCAL副本无效,而它所指向的对象仍保留在内存中,安全无虞。

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