Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中通过复制传递后返回相同值的函数_Java - Fatal编程技术网

java中通过复制传递后返回相同值的函数

java中通过复制传递后返回相同值的函数,java,Java,我有一个代码,如下所示,我正在交换函数中类的实例变量,称为SwapNames public class Sam3 { public String FirstName, LastName; public static void main(String[] args) { Sam3 objSam1 = new Sam3(); Sam3 objSam2 = new Sam3(); objSam1.FirstName

我有一个代码,如下所示,我正在交换
函数
中类的
实例变量
,称为
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)参考
objSam1
objSam2
将被复制到方法
SwapNames
参数
obj1
obj2

因此,交换后,
obj1
obj2
的参考值将被交换,而不是
objSam1
objSam2

objSam1
objSam2
仍保留着旧的引用对象。所以这不会影响任何事情


为了更好的澄清

Sam3 temp = obj2; 
obj2 = obj1;
obj1 = temp;
如果打印对象的FirstName和LastName的值

System.out.print(obj1.FirstName + " " + obj2.LastName);
您将看到结果将是
Name2 Name1

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

在Java中,所有内容都是按值传递的

调用
SwapNames(objSam1,objSam2)参考
objSam1
objSam2
将被复制到方法
SwapNames
参数
obj1
obj2

因此,交换后,
obj1
obj2
的参考值将被交换,而不是
objSam1
objSam2

objSam1
objSam2
仍保留着旧的引用对象。所以这不会影响任何事情


为了更好的澄清

Sam3 temp = obj2; 
obj2 = obj1;
obj1 = temp;
如果打印对象的FirstName和LastName的值

System.out.print(obj1.FirstName + " " + obj2.LastName);
您将看到结果将是
Name2 Name1


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

在代码中,有两个Sam3对象引用变量
其中包含Sam3类的对象

对于objSam1,Same3的第一个实例[记住Sam3
包含两个实例变量FirstName,LastName]
objSam1.FirstName=“Name1”
objSam1.LastName=null;//如果您不设置或初始化,这是默认值

对于作为Sam3第二个实例的objSam2[记住Sam3
类包含两个实例变量FirstName,LastName]
objSam2.FirstName=null//如果不初始化,这是默认值。FirstName
objSam2.LastName=“Name2”

现在,在调用swap方法之后,对象被更改,但您正在更改

objSam2.FirstName=“First Name”
//以前的FirstName为null,并且.LastName中没有任何更改(请参见上面的代码)

对于
objSam1.LastName=“Last Name”
//以前它是空的,并且.FirstName(参见上面的代码)没有更改


所以计算机给出了正确的答案

在代码中,有两个Sam3对象引用变量
其中包含Sam3类的对象

对于objSam1,Same3的第一个实例[记住Sam3
包含两个实例变量FirstName,LastName]
objSam1.FirstName=“Name1”
objSam1.LastName=null;//如果您不设置或初始化,这是默认值

对于作为Sam3第二个实例的objSam2[记住Sam3
类包含两个实例变量FirstName,LastName]
objSam2.FirstName=null//如果不初始化,这是默认值。FirstName
objSam2.LastName=“Name2”

现在,在调用swap方法之后,对象被更改,但您正在更改

objSam2.FirstName=“First Name”
//以前的FirstName为null,并且.LastName中没有任何更改(请参见上面的代码)

对于
objSam1.LastName=“Last Name”
//以前它是空的,并且.FirstName(参见上面的代码)没有更改


所以计算机给出了正确的答案

谢谢您的回复。如果我把objSam1.FirstName=“Name2”放在没有交换的地方,它就会生效。但是,如果我交换并更改了值,它为什么不会生效呢?谢谢回复。如果我把objSam1.FirstName=“Name2”放在没有交换的地方,它就会生效。但是为什么如果我交换并更改了值,它就不会生效呢