java值传递和引用传递详解

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/flower_vip https://blog.csdn.net/flower_vip/article/details/82388408

Java总是按值而不是通过引用传递参数。

让我通过一个例子解释一下:

public class Main{
public static void main(String[] args){
Foo f = new Foo(“f”);
changeReference(f); // It won’t change the reference!
modifyReference(f); // It will modify the object that the reference variable “f” refers to!
}
public static void changeReference(Foo a){
Foo b = new Foo(“b”);
a = b;
}
public static void modifyReference(Foo c){
c.setAttribute(“c”);
}
}
我将逐步解释这个:

1.声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的新对象类型”f”。

Foo f = new Foo(“f”);
在此处输入图像描述
这里写图片描述

2.从方法方面,声明Foo了具有名称的类型的引用,a并且它最初被分配给null。

public static void changeReference(Foo a)
在此处输入图像描述
这里写图片描述

3.在调用方法时changeReference,引用a将分配给作为参数传递的对象。

changeReference(f);
在此处输入图像描述
这里写图片描述

4.声明一个名为btype 的引用,Foo并将其分配给Foo具有属性的新对象类型”b”。

Foo b = new Foo(“b”);
在此处输入图像描述
这里写图片描述

5.a = b将引用aNOT 重新分配给f其属性所在的对象”b”。

在此处输入图像描述
这里写图片描述

6.在调用modifyReference(Foo c)方法时,将c创建引用并将其分配给具有属性的对象”f”。

在此处输入图像描述
这里写图片描述

7.c.setAttribute(“c”);将更改引用c指向它的对象的属性,并且它与引用f指向它的对象相同。

在此处输入图像描述
这里写图片描述

我希望你现在明白如何将对象作为参数传递在Java中:)

参考:https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value#

猜你喜欢

转载自blog.csdn.net/flower_vip/article/details/82388408