gpt4 book ai didi

Java 通过引用传递

转载 作者:IT老高 更新时间:2023-10-28 21:04:05 26 4
gpt4 key购买 nike

这两个代码有什么区别:

代码 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;
}

这两段代码有区别吗?

最佳答案

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


让我通过 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");
}
}

我将分步骤解释:

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

    Foo f = new Foo("f");

    enter image description here

  2. 在方法方面,声明了一个名为 a 的类型为 Foo 的引用,并且它最初被分配给 null

    public static void changeReference(Foo a)

    enter image description here

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

    changeReference(f);

    enter image description here

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

    Foo b = new Foo("b");

    enter image description here

  5. a = b 正在将引用 a 而不是 f 重新分配给其属性为 的对象” b".

    enter image description here


  6. 当您调用 modifyReference(Foo c) 方法时,会创建一个引用 c 并将其分配给具有 "f"属性的对象.

    enter image description here

  7. c.setAttribute("c"); 会改变引用 c 指向它的对象的属性,和引用 f 指向它。

    enter image description here

我希望您现在了解在 Java 中如何将对象作为参数传递:)

关于Java 通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com