gpt4 book ai didi

java - 增加 Integer 变量不会影响引用同一对象的另一个

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:44 25 4
gpt4 key购买 nike

我一直理解静态变量在被引用时共享一个实例。我想对此进行测试,但结果与我预期的不同。

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);
}

输出:

counter: 1

test: 0

由于 test 引用 counter 我认为当我增加 countertest 也会自动增加.但是,test 似乎从某处引用了 0,问题是,在哪里?

最佳答案

Since test references counter

这个假设是错误的。在 Java 中,您不能引用变量。存储在变量中的是一个值。该值可以是原始类型值或引用类型值。在基元的情况下,值是基元的值。对于引用类型,

The reference values (often just references) are pointers to these objects, and a special null reference, which refers to no object.

int a = 0;
int b = a;

变量 a 被评估产生一个值,0,并且该值存储在 b 中。

Integer a = 0;
Integer b = a;

0 通过 Integer.valueOf(int) 转换为 Integer 和值,对 Integer< 的引用 对象存储在 a 中。然后评估 a,生成对 Integer 对象的引用的值,并将该值存储在 b 中。

这与在

中讨论的概念相同

此外,变量是 static 的事实是无关紧要的。

解决此问题的唯一方法是手动更新 test

counter++; 
test = counter;

关于java - 增加 Integer 变量不会影响引用同一对象的另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29452444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com