这是我在StackOverflow上的第一个问题.这是有问题的代码:
public class ListStuff {
public static void main(String [] args) {
String[] randomNames = {"Herbie", "Jaco", "Pat", "Michael"};
String[] reversedNames = revertNames(randomNames);
for (int i = 0; i < reversedNames.length; i++) {
System.out.println(reversedNames[i]);
}
}
public static String[] revertNames(String[] s) {
for (int i = 0; i < s.length / 2; i++) {
String tmp = s[s.length - 1 - i];
s[s.length - 1 - i] = s[i];
s[i] = tmp;
}
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码运行正常,reversedNames
变量打印为还原; 没有抱怨.然而,我主要担心的是,当我这样做时String[] reversedNames = revertNames(randomNames);
,变量randomNames
也会被恢复.我没做任何地方randomNames
用a 更改变量randomNames = blabla;
,所以我不明白为什么该变量不断变换为自身的恢复版本,即使我只是将它作为参数传递.
我已经编程了大约一年,而且我对变量范围的了解非常有限.谁能指出我正确的方向?
Java中的数组是引用类型.这意味着当您将数组传递给revertNames
方法时,该方法内部的任何更改也将在外部看到.由于您要使用以下代码更改s
内部数组参数revertNames
:
String tmp = s[s.length - 1 - i];
s[s.length - 1 - i] = s[i];
s[i] = tmp;
Run Code Online (Sandbox Code Playgroud)
在此过程中也更改了randomNames
代替的原始数组s
.