java - 静态变量的值如何变化?
问题描述
我有以下代码:
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
列表static
。integer 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
)的参数被静态参数引用了?你能解释一下静态变量是如何变化的吗?
解决方案
推荐阅读
- python - 关于 O(LogN) 的时间复杂度
- java - weblogic证书导入问题
- python - 在模块末尾分配的变量
- javascript - 如何在 php 中创建干净的 url 从 mysql 获取数据?
- arrays - 致命错误:索引超出范围?但真的吗?
- entity-framework-6 - Entity Framework (v6) Eager-Loading 奇怪的行为 - 'Gotcha'
- javascript - 括号中的正则表达式匹配数(Firefox)
- java - 为什么这加起来是 11 而不是 8?
- nginx - Nginx access_log 的路径可以带变量吗?
- sql - 如何存储不带引号的是或否的布尔值?