问题描述
这个假设是错误的。在Java中,您不能引用变量。变量中存储的是一个值。该值可以是原始类型值或引用类型值。对于基元,值是基元的值。对于引用类型,
在
int a = 0;
int b = a;
@H_301_3@
计算该变量a@H_301_3@以产生一个值
0@H_301_3@,并将该值存储在中
b@H_301_3@。
在
Integer a = 0;
Integer b = a;
@H_301_3@
0@H_301_3@转换为
Integer@H_301_3@直通
Integer.valueOf(int)@H_301_3@和值,将对
Integer@H_301_3@对象的引用存储在中
a@H_301_3@。然后
a@H_301_3@进行评估,生成对该
Integer@H_301_3@对象的引用的值,并将该值存储在中
b@H_301_3@。
同样,变量static@H_301_3@是无关紧要的事实。
解决此问题的唯一方法是test@H_301_3@手动更新,即
counter++;
test = counter;
@H_301_3@
解决方法
我总是理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我预期的不同。
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);
}
输出:
柜台:1
测试:0
由于test
引用counter
我认为,当我增加counter
那么test
将自动以及递增。但是,似乎test
是0
从某处引用,问题是在哪里?