我总是理解静态变量在引用时共享一个实例.我想对此进行测试,但结果与我预期的不同.
static Integer counter = 0;
static Integer test = counter;
public static void main(String args[]) {
counter++;
System.out.println("counter: " + counter);
System.out.println("test: " + test);
}
Run Code Online (Sandbox Code Playgroud)
输出:
柜台:1
测试:0
由于test引用counter我认为,当我增加counter那么test将自动以及递增.但是,似乎test是0从某个地方引用,问题是,在哪里?
由于
test参考文献counter
这个假设是错误的。在 Java 中,不能引用变量。变量中存储的是一个值。该值可以是原始类型值或引用类型值。在基元的情况下,该值是基元的值。对于引用类型,
在
int a = 0;
int b = a;
Run Code Online (Sandbox Code Playgroud)
该变量a被评估以产生一个值 ,0并且该值存储在 中b。
在
Integer a = 0;
Integer b = a;
Run Code Online (Sandbox Code Playgroud)
0转换为IntegerthroughInteger.valueOf(int)和值,对Integer对象的引用存储在 中a。然后a进行求值,生成该对象引用的值Integer,并将该值存储在 中b。
这与中讨论的概念相同
此外,变量的事实static是无关紧要的。
解决这个问题的唯一方法是test手动更新,即
counter++;
test = counter;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |