我一直理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我的预期不同。
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);
}
output:
计数器:1
test: 0
Since test
参考counter
我认为当我增加counter
then test
也会自动增加。然而,似乎test
正在引用0
来自某个地方,问题是,哪里?
Since test
参考counter
这个假设是错误的。在 Java 中,不能引用变量。变量中存储的是一个值。该值可以是基本类型值或引用类型值。在基元的情况下,该值是基元的值。对于引用类型,
参考值(通常只是引用)是指向这些值的指针
对象,以及一个特殊的空引用,它不引用任何对象。
In
int a = 0;
int b = a;
变量a
被评估以产生一个值,0
,该值存储在b
.
In
Integer a = 0;
Integer b = a;
0
被转换为Integer
通过Integer.valueOf(int)
和值,对一个的引用Integer
对象存储在a
. Then a
被评估,产生该引用的值Integer
对象,该值存储在b
.
这与中讨论的概念相同
此外,事实上变量是static
是无关紧要的。
解决这个问题的唯一方法是更新test
手动即
counter++;
test = counter;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)