您的位置:首页 > 编程语言 > Java开发

Java学习随笔1:Java是值传递还是引用传递?

2015-10-18 10:01 531 查看
Java always passes arguments by value NOT by reference.

Let me explain this through an example:

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");
}
}

I will explain this in steps:

Declaring a reference named
f
of type
Foo
and assign it to a new object of type
Foo
with an attribute
"f"
.

Foo f = new Foo("f");




From the method side, a reference of type
Foo
with a name
a
is declared and it's initially assigned to
null
.

public static void changeReference(Foo a)




As you call the method
changeReference
, the reference
a
will be assigned to the object which is passed as an argument.

changeReference(f);




Declaring a reference named
b
of type
Foo
and assign it to a new object of type
Foo
with an attribute
"b"
.

Foo b = new Foo("b");




a = b
is re-assigning the reference
a
NOT
f
to the object whose its attribute is
"b"
.



As you call
modifyReference(Foo c)
method, a reference
c
is created and assigned to the object with attribute
"f"
.



c.setAttribute("c");
will change the attribute of the object that reference
c
points to it, and it's same object that reference
f
points to it.



I hope you understand now how passing objects as arguments works in Java :)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: