Java 作为参数传递给方法的数组中的值在方法运行时如何变化
我是java的新手。我有一个Java 作为参数传递给方法的数组中的值在方法运行时如何变化,java,arrays,Java,Arrays,我是java的新手。我有一个全局数组定义为private int datarightemp[]=new int[4] 在代码的中间,这个数组作为参数传递给一个方法(下面我附上了代码)。在此新方法中,先前的全局数组的值(即dataRightTemp)正在从使用该方法的参数中传递的数组的计算中更改。当计算完成后,新值被设置为dataRightTemp,如何更改方法的参数中数组的值,有人能帮我解决这个问题吗。提前谢谢 public class Demo{ private int
全局数组
定义为private int datarightemp[]=new int[4]代码> 在代码的中间,这个<代码>数组
作为参数传递给一个方法(下面我附上了代码)。在此新方法中,先前的的值(即全局数组
)正在从使用该方法的dataRightTemp
中传递的数组的计算中更改。当计算完成后,新值被设置为参数
,如何更改方法的dataRightTemp
参数中
数组的值,有人能帮我解决这个问题吗。提前谢谢
当计算完成,新值被设置为dataRightTemp时,如何更改方法参数中数组的值,有人能帮我解决这个问题吗 您有两个对同一数组的引用。这些引用是'dataRightTemp'和'rightArray'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(); } }
因此,数组中的任何更改都将反映在两个引用中,而不管它是类中的全局引用还是方法中的本地引用。当您调用roundingRest(dataLeft,datarightemp)时
是rightArray
。因此,当您更改dataRightTemp
内部datarightemp
函数时,您也会更改roundingRest
。数组参数的作用是作为链接,而不是“源数组的副本”。我同意Azodiuos的回答。您可以使用rightArray
存储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,您是否在问为什么在另一个方法中使用时会发生变化?提示:尽量保持一致:您的代码应该在字段上工作(然后您不需要将字段作为参数传递到方法中);或者它们不是字段。但是混合起来真的很混乱。@Jägermeister对不起aksing,我是开发新手。我不知道什么是字段,也不知道如何使代码一致,你能提供一个链接让我了解它们吗。@codsop提问很好。但问题是:我们在这里学习非常基本的东西。没有“询问”这类事情很有意义。相反,你应该去查阅一本好书或网上资源,比如……然后一步一步地浏览。datarightemp
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(); }