首页 > 解决方案 > 静态变量的值如何变化?

问题描述

我有以下代码:

public class Main {

  public static List<Integer> ODD_NUMBERS = new ArrayList<Integer>();

  public static void main(String[] args) {

    for(int i =0;i<10;i++)
      ODD_NUMBERS.add(2*i+1);

    System.out.println("1. oddNumbers:    "+String.valueOf(ODD_NUMBERS));

    addEvenNumbers(ODD_NUMBERS);

    System.out.println("3. oddNumbers:    "+String.valueOf(ODD_NUMBERS));
  }

  private static void addEvenNumbers(List<Integer> listOfNumbers) {

    for(int i =0;i<10;i++){
      listOfNumbers.add(2*i);
    }

    System.out.println("2. listOfNumbers: "+String.valueOf(listOfNumbers));
  }

}

以及以下输出:

1. oddNumbers:    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
2. listOfNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
3. oddNumbers:    [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

我很难理解静态场是如何变化的!!!

鉴于我有一个由奇数填充的ODD_NUMBERS列表staticinteger numbers但随后我将此列表作为参数发送给该addEvenNumbers方法,该方法在其中添加了一些Even integers,并且该方法内部的打印结果是:

listOfNumbers: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

但是,当我回到main()方法并打印静态变量ODD_NUMBERS时,它的值与更改为以下值的值相同,如下listOfNumbers所示:

 [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

listOfNumbers和具有相同值的事实ODD_NUMBERS让我感到惊讶,因为该值listOfNumbers是 的一个参数,addEvenNumbers并且它必须对该代码块没有任何影响。此外,该方法从不返回任何内容。

所以,我的问题是:

是不是因为method( listOfNumbers)的参数被静态参数引用了?你能解释一下静态变量是如何变化的吗?

标签: java

解决方案


推荐阅读