Java多个变量连续等号赋值的疑问

QQ图片20200526201515.png

留意一下断点的位置,已经打到运算的下一行。

可以看到,最右边的newDTV是一个对象。
但是!!!最左边和中间的inputDTV和setterDTV都是null。

这是一个很玄学的问题,同一个查询,正常情况下,3个变量都能顺利赋值。
但是偶尔,就会出现上面的情况。

我一度认为是不是jvm突然gc清理了我的变量。

这个代码,是微软的msssql-jdbc8.jar11,在解析表字段类型。

为何呢?

回答:

从能看到的信息来说的话,最大可能只能是你源码和你运行的代码不匹配,也就是你在源码看到的inputDTV = setterDTV = newDTV这一行最开始不是赋值而是和赋值无关的其他的语句,你源码更新了但是你的class文件没有更新,所以造成实际运行过程中没有赋值的情况

如果从你的inputDTVsetterDTV的颜色和是否斜体来看,应该是本类的普通成员变量,所以也有可能你是多线程操作,在你debug看到的这一刻之前,被其他线程修改了成员变量的值

如果是第一种情况,你只需要清理掉之前的class文件,再重新跑一次就可以证实了
如果是第二种情况,你需要查看所有inputDTVsetterDTV赋值的地方,前面都加一个判断,如果被赋值的对象为空,则打印一段话,这样帮助你找到被赋值为空的场景

大概能想到的就这些,希望对你有所帮助

回答:

运算顺序?

以上是 Java多个变量连续等号赋值的疑问 的全部内容, 来源链接: utcz.com/p/175925.html

回到顶部