Java引用传递这两个代码之间有什么区别:代码A:Foo myFoo;myFoo = createfoo();哪里public Foo createFoo(){
Foo foo = new Foo();
return foo;}相对于。代码B:Foo myFoo;createFoo(myFoo);public void createFoo(Foo foo){
Foo f = new Foo();
foo = f;}这两个代码之间有什么区别吗?
3 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
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"); }}
声明名为 f
类型 Foo
并将其分配给一个新的类型对象。 Foo
带有属性 "f"
.Foo f = new Foo("f");
从方法方面来说,是类型的引用。 Foo
有名字 a
被声明,并且它最初被分配给 null
.public static void changeReference(Foo a)
正如您所称的方法 changeReference
,参考文献 a
将分配给作为参数传递的对象。 changeReference(f);
声明名为 b
类型 Foo
并将其分配给一个新的类型对象。 Foo
带有属性 "b"
.Foo b = new Foo("b");
a = b
正在重新分配引用。 a
不 f
属性为 "b"
.如你所言 modifyReference(Foo c)
方法,引用 c
被创建并分配给具有属性的对象。 "f"
.c.setAttribute("c");
将更改引用对象的属性。 c
指向它,与引用的对象相同 f
指着它。
HUWWW
TA贡献1874条经验 获得超12个赞
Foo myFoo;{ //Method call starts here Foo foo; foo = myFoo; Foo f = new Foo(); foo = f;} //Method call ends here
添加回答
举报
0/150
提交
取消