为什么这一个变量会受到影响?

1 java variables scope

这是我在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;,所以我不明白为什么该变量不断变换为自身的恢复版本,即使我只是将它作为参数传递.

我已经编程了大约一年,而且我对变量范围的了解非常有限.谁能指出我正确的方向?

Tud*_*dor 7

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.