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

Thr*_*eaT 5 java

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

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将自动以及递增.但是,似乎test0从某个地方引用,问题是,在哪里?

Sot*_*lis 3

由于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)