gpt4 book ai didi

java - Java 中对象可以按值传递而不是按引用传递吗?

转载 作者:行者123 更新时间:2023-12-02 07:08:52 26 4
gpt4 key购买 nike

让我们考虑以下 Java 代码。

package obj;

final class First
{
public int x;

public First(int x)
{
this.x=x;
}
}

final class Second
{
public Second(First o)
{
o.x=10;
}
}

final public class Main
{
public static void main(String[] args)
{
First f=new First(50);

Second s=new Second(f);

System.out.println("x = "+f.x);
}
}

在上面的代码中,我们通过语句 First f=new First(50); 提供值 50,该值被分配给以下类的类成员 x在类 First 的构造函数主体中键入 int

<小时/>

在类Second中,类First的对象f通过语句Second s=new Second传递(f); 并且我们将该对象中保存的实例变量 x 的值修改为 10,这将影响原始对象 f,因为在 Java 对象中始终通过引用而不是通过值传递。

<小时/>

在某些特定情况下,不允许对原始对象进行此类更改可能至关重要。 Java 中是否有任何机制可以让我们阻止此类修改? (这可能允许我们按值传递对象)

最佳答案

不,该对象根本没有在 Second 中传递。 引用正在按值传递。

Java总是使用值传递,但任何表达式的值都只是原始类型或引用,而不是对象。

听起来您想创建现有对象的副本,然后将对该新对象的引用传递给该方法(按值)。 “副本”的构成完全取决于类中的数据。 (您可能可以使用浅拷贝,或者您可能需要更深入等等。)

关于java - Java 中对象可以按值传递而不是按引用传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064404/

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