gpt4 book ai didi

java - Java中的引用类型

转载 作者:行者123 更新时间:2023-12-02 09:55:38 25 4
gpt4 key购买 nike

Possible Duplicate:
Is Java pass-by-reference?
Java pass by reference

对于下面的Java程序,我的理解是a是 Integer 的引用类型,类似于 C/C++ 中的指针类型。因此,在方法 f 中所做的任何更改它的值将在方法返回后反射(reflect)出来。但是println仍然打印其原始值 0而不是 3。

Integerint没有什么区别。难道是我之前的理解有误?请帮忙。谢谢!

  public static void f(Integer b){
b=3;
}
public static void main(String[] args){
Integer a=0;
f(a);
System.out.println(a);
}

最佳答案

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. 从方法端来看,类型为 Foo 的引用有一个名字a已声明,并且最初分配给 null .

    public static void changeReference(Foo a)

    enter image description here

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

    changeReference(f);

    enter image description here

  4. 声明一个名为 b 的引用类型 Foo并将其分配给类型为 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 - Java中的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808233/

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