gpt4 book ai didi

java - java中传递副本后返回相同值的函数

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

我有如下代码,我在Function中交换类的实例变量,称为SwapNames

public class Sam3 
{
public String FirstName, LastName;

public static void main(String[] args)
{
Sam3 objSam1 = new Sam3();
Sam3 objSam2 = new Sam3();

objSam1.FirstName = "Name1";
objSam2.LastName = "Name2";

System.out.print(objSam1.FirstName + " " + objSam2.LastName);

SwapNames(objSam1, objSam2);

System.out.print(objSam1.FirstName + " " + objSam2.LastName);
}

public static void SwapNames(Sam3 obj1, Sam3 obj2)
{
Sam3 temp = obj2;
obj2 = obj1;
obj1 = temp;

obj1.FirstName = "First Name";
obj2.LastName = "Last Name";
}
}

现在代码的输出如下

Name1 Name2
Name1 Name2

我不明白的是我交换了 obj1 和 obj2 中的值 - 对它们的的引用。之后我正在更改值。

为什么代码没有生效。

谢谢回复

最佳答案

在 Java 中,一切都是按值传递

当您调用 SwapNames(objSam1, objSam2); 时,引用 objSam1objSam2 将被复制到方法 SwapNames code> 参数 obj1obj2

因此,在交换obj1obj2的引用值之后,将交换objSam1objSam2

objSam1objSam2 仍然保留旧的引用对象。所以这不会产生任何影响。

<小时/>

为了更好地说明

Sam3 temp = obj2; 
obj2 = obj1;
obj1 = temp;

如果打印对象的名字和姓氏的值。

System.out.print(obj1.FirstName + " " + obj2.LastName);

您将看到结果为Name2 Name1

因为 obj1 现在引用第二个对象,而 obj2 引用第一个对象。

关于java - java中传递副本后返回相同值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964949/

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