Java 方法更改传递给它的变量
Java method changes the variable which was passed to it
我试图在我的程序中实现加密,但 运行 遇到了一些方法上的困难。我有一个未加密的数组,它应该保持未加密状态,另一个数组我想加密。但是,当我调用该方法时,它会加密两个数组。
import java.util.Base64;
public class test {
public static void main(String[] args) {
String[] arr = {"1", "2"};
String[] arrEncrypted = encryption(arr);
System.out.println(arr[0]);
System.out.println(arrEncrypted[0]);
}
public static String[] encryption(String[] data) {
for (int i = 0; i < data.length; i++) { // get each element of data
String encodedString = Base64.getEncoder().encodeToString(data[i].getBytes()); // encryption
data[i] = encodedString; // reassign
}
return data;
}
}
我找不到问题,因为据我所知,我 return 加密数据并将其分配给另一个数组,但由于某种原因,我传递的数组也发生了变化。
这是输出
MQ== //has to be 1
MQ== //correct
在此先感谢您的帮助!
三件事:
不能“传变量”,只能传变量的值
变量“arr”不是数组,它有一个引用数组的值。
因此变量“data”得到了“arr”值的副本,它是对同一个数组.[=11的引用=]
您应该为输出分配一个新数组,例如
String[] outData = new String[data.length];
当您调用 encryption(arr)
时,您正在传递该对象的 reference 的值,这意味着您最终会直接改变它。如果您没有 return data
并将 encryption
声明为 void
return,您的输入数组仍将是“加密的”。
如果您只想 return 一个新数组而不修改输入,您可以初始化一个与输入长度相同的新空 String[]
,并为其分配元素在你的 for 循环中。
例如,
public static String[] encryption(String[] data) {
String[] encrypted = new String[data.length];
for (int i = 0; i < data.length; i++) { // get each element of data
String encodedString = Base64.getEncoder().encodeToString(data[i].getBytes()); // encryption
encrypted[i] = encodedString; // reassign
}
return encrypted;
}
请参阅 Is Java "pass-by-reference" or "pass-by-value"? 以了解当您传递 data
参数时幕后发生的事情的详尽解释。
我试图在我的程序中实现加密,但 运行 遇到了一些方法上的困难。我有一个未加密的数组,它应该保持未加密状态,另一个数组我想加密。但是,当我调用该方法时,它会加密两个数组。
import java.util.Base64;
public class test {
public static void main(String[] args) {
String[] arr = {"1", "2"};
String[] arrEncrypted = encryption(arr);
System.out.println(arr[0]);
System.out.println(arrEncrypted[0]);
}
public static String[] encryption(String[] data) {
for (int i = 0; i < data.length; i++) { // get each element of data
String encodedString = Base64.getEncoder().encodeToString(data[i].getBytes()); // encryption
data[i] = encodedString; // reassign
}
return data;
}
}
我找不到问题,因为据我所知,我 return 加密数据并将其分配给另一个数组,但由于某种原因,我传递的数组也发生了变化。
这是输出
MQ== //has to be 1
MQ== //correct
在此先感谢您的帮助!
三件事:
不能“传变量”,只能传变量的值
变量“arr”不是数组,它有一个引用数组的值。
因此变量“data”得到了“arr”值的副本,它是对同一个数组.[=11的引用=]
您应该为输出分配一个新数组,例如
String[] outData = new String[data.length];
当您调用 encryption(arr)
时,您正在传递该对象的 reference 的值,这意味着您最终会直接改变它。如果您没有 return data
并将 encryption
声明为 void
return,您的输入数组仍将是“加密的”。
如果您只想 return 一个新数组而不修改输入,您可以初始化一个与输入长度相同的新空 String[]
,并为其分配元素在你的 for 循环中。
例如,
public static String[] encryption(String[] data) {
String[] encrypted = new String[data.length];
for (int i = 0; i < data.length; i++) { // get each element of data
String encodedString = Base64.getEncoder().encodeToString(data[i].getBytes()); // encryption
encrypted[i] = encodedString; // reassign
}
return encrypted;
}
请参阅 Is Java "pass-by-reference" or "pass-by-value"? 以了解当您传递 data
参数时幕后发生的事情的详尽解释。