我知道我们无法更改传递给
等函数的引用void fun(dog a){
a=null;
}
执行功能
后main(String[] args){
dog a=new dog();
fun(a);
}
狗a没有改变。
所以我想知道如何在函数中将引用a更改为null
答案 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副本无效,而它所指向的对象仍保留在内存中,安全无虞。
我想一个简单的比喻就像有两条平行的街道通往同一栋楼。你可以摧毁其中一条道路,但这对建筑物或其他道路没有影响。