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

问题描述

由于test引用counter

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

引用值(通常只是引用)是指向这些对象的指针,还有一个特殊的空引用,它不引用任何对象。

int a = 0;
int b = a;

计算该变量a以产生一个值0,并将该值存储在中b

Integer a = 0;
Integer b = a;

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

同样,变量static是无关紧要的事实。

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

counter++; 
test = counter;

解决方法

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

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

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”