Java 作为参数传递给方法的数组中的值在方法运行时如何变化

Java 作为参数传递给方法的数组中的值在方法运行时如何变化,java,arrays,Java,Arrays,我是java的新手。我有一个全局数组定义为private int datarightemp[]=new int[4] 在代码的中间,这个数组作为参数传递给一个方法(下面我附上了代码)。在此新方法中,先前的全局数组的值(即dataRightTemp)正在从使用该方法的参数中传递的数组的计算中更改。当计算完成后,新值被设置为dataRightTemp,如何更改方法的参数中数组的值,有人能帮我解决这个问题吗。提前谢谢 public class Demo{ private int

我是java的新手。我有一个
全局数组
定义为
private int datarightemp[]=new int[4]
在代码的中间,这个<代码>数组作为参数传递给一个方法(下面我附上了代码)。在此新方法中,先前的
全局数组
的值(即
dataRightTemp
)正在从使用该方法的
参数
中传递的数组的计算中更改。当计算完成后,新值被设置为
dataRightTemp
,如何更改方法的
参数中
数组的值,有人能帮我解决这个问题吗。提前谢谢

    public class Demo{    
    private int key[]={1,0,1,0};
    private int dataBlock[]={1,1,1,0,1,0,1,1};
    private int dataLeft[]=new int [4]; // for left part the plain text 
    private int dataRight[]=new int [4];    //for right part of the plain text
    private int dataLeftTemp[];
    private int dataRightTemp[]=new int [4];


     public void roundingStart(){


        for(int i=0;i<4;i++){
            //           AND function
            dataRightTemp[i]=key[i] & dataRight[i];
            //              XOR function
            dataRightTemp[i]=dataRightTemp[i]^dataLeft[i];

        }

        dataLeft=dataRight.clone();
        //      printResults();

        printFirst();
        roundingRest(dataLeft,dataRightTemp);


    }
      public void roundingRest(int leftArray[],int rightArray[]){

        System.out.println("Before");
        for(int x: rightArray){
            System.out.print(x);
        }

        System.out.println();


        for(int i=0;i<4;i++){
            //          AND function
            dataRightTemp[i]=key[i] & rightArray[i];
            //          XOR Function
            dataRightTemp[i]=dataRightTemp[i]^leftArray[i];

        }
        System.out.println("right after");

        for(int x: rightArray){
            System.out.print(x);
        }
        System.out.println();
        System.out.println();
  }
    public void main(String args[]){
     roundingStart();
  }
  }
当计算完成,新值被设置为dataRightTemp时,如何更改方法参数中数组的值,有人能帮我解决这个问题吗

您有两个对同一数组的引用。这些引用是'dataRightTemp''rightArray'


因此,数组中的任何更改都将反映在两个引用中,而不管它是类中的全局引用还是方法中的本地引用。

当您调用
roundingRest(dataLeft,datarightemp)时
rightArray
dataRightTemp
。因此,当您更改
datarightemp
内部
roundingRest
函数时,您也会更改
rightArray
。数组参数的作用是作为链接,而不是“源数组的副本”。

我同意Azodiuos的回答。您可以使用
local array
存储
rightArray
的值,请尝试此代码。如果我正确理解你的要求,我想这将满足你的需要

       public void roundingRest(int leftArray[],int rightArray[]){
            int rightTempTemp[]=new int[4];
    //      for Storing the rightArray[]

    //      for Copying the rightArray to rightTempTemp
            for(int j=0;j<rightArray.length;j++){
                rightTempTemp[j]=rightArray[j];

            }
            System.out.println("Before");
            for(int x: rightTempTemp){
                System.out.print(x);
            }

            System.out.println();


            for(int i=0;i<4;i++){
                //          AND function
                dataRightTemp[i]=key[i] & rightTempTemp[i];
                //          XOR Function
                dataRightTemp[i]=dataRightTemp[i]^leftArray[i];

            }
            System.out.println("right after");

            for(int x: rightTempTemp){
                System.out.print(x);
            }
        System.out.println();
        System.out.println();

}
public void roundingRest(int-leftArray[],int-rightArray[]{
int righttentemp[]=新int[4];
//用于存储rightArray[]
//用于将rightArray复制到RightTestEMP

对于(int j=0;jSo,您是否在问为什么
datarightemp
在另一个方法中使用时会发生变化?提示:尽量保持一致:您的代码应该在字段上工作(然后您不需要将字段作为参数传递到方法中);或者它们不是字段。但是混合起来真的很混乱。@Jägermeister对不起aksing,我是开发新手。我不知道什么是字段,也不知道如何使代码一致,你能提供一个链接让我了解它们吗。@codsop提问很好。但问题是:我们在这里学习非常基本的东西。没有“询问”这类事情很有意义。相反,你应该去查阅一本好书或网上资源,比如……然后一步一步地浏览。
       public void roundingRest(int leftArray[],int rightArray[]){
            int rightTempTemp[]=new int[4];
    //      for Storing the rightArray[]

    //      for Copying the rightArray to rightTempTemp
            for(int j=0;j<rightArray.length;j++){
                rightTempTemp[j]=rightArray[j];

            }
            System.out.println("Before");
            for(int x: rightTempTemp){
                System.out.print(x);
            }

            System.out.println();


            for(int i=0;i<4;i++){
                //          AND function
                dataRightTemp[i]=key[i] & rightTempTemp[i];
                //          XOR Function
                dataRightTemp[i]=dataRightTemp[i]^leftArray[i];

            }
            System.out.println("right after");

            for(int x: rightTempTemp){
                System.out.print(x);
            }
        System.out.println();
        System.out.println();

}