Java - 更改变量有时为空

时间:2018-01-17 00:37:36

标签: java variables

我有一个不断变化的Object变量。更具体地说,它是OpenCV Mat()变量类型。它在背景中不断变化,在相机拍摄另一张照片时设置为新值。然后我尝试从循环中访问变量。我从来没有明确地将变量设置为null,但我相信当变量在后台循环中重置时,它会在设置为值之前立即变为null。

据我所知,对于Object变量类型,java实际上将引用传递给变量,类似于C / C ++中的指针。为了解决这个问题,我使用clone()函数创建一个变量,当我在程序的其他位置访问它时,该变量不会改变。问题是当我对它执行clone()函数时,有时变量为null。我可以使用if(variable!= null)类型的语句来检查这一点,但这并不能保证变量不会从if语句更改为克隆变量。

所以,要问的是,处理这种情况的正确方法是什么,以至于我不会在事故中访问空变量。

如果问题措辞不当,或者您想要包含代码,请告诉我,我会将其包含在内。谢谢!

4 个答案:

答案 0 :(得分:1)

这种情况的标准方法是:

final Type localCopy = globalVariable;
if (localCopy != null) {
    // work with localCopy variable
    // even if null is assigned to globalVariable - your localCopy will not be null
}

答案 1 :(得分:0)

你应该锁定线程,制作副本,释放线程。

你拥有另一个线程吗?

答案 2 :(得分:0)

您需要同步对变量的访问权限,我认为在您的情况下,简单锁定应该有所帮助:

synchronized (object) {
    // here you can do whatever you want with object, other calls synchronized will wait until you end
}

答案 3 :(得分:0)

查看代码示例有助于更好地理解您所面临的问题。你在运行多个线程吗?如果是这样,肯定有一些事情需要考虑。使用volatile或同步可能会有所帮助:Difference between volatile and synchronized in Java