Object == null vs boolean == false

时间:2015-10-14 10:44:20

标签: java performance object if-statement boolean

如果对象尚未分配,我需要分配一个对象。

Object obj;
While(true){
    if(obj == null) obj = new Object();
    //do other things
}

Object obj;
boolean isObjAssigned;
While(true){
    if(!isObjAssigned) obj = new Object();
    //do other things
}

这两种检查方法中的哪一种是更好的做法?

6 个答案:

答案 0 :(得分:1)

上下文中最好的,恕我直言,语法只是将赋值拉出循环

  Object obj = new Object();

  while (true) {
    // do other things
  }

更详细的例子中,例如

  Object obj;                    // obj contains trash, not necessary null
  Boolean isObjAssigned = false; // note "= false;"

  if (...) { // obj can be either assigned or not (depending on the condition)
    obj = ...
    isObjAssigned = true; // do not forget this
  }

  while (true) {
    if (!isObjAssigned) {
      obj = new Object();
      isObjAssigned = true; // do not forget this in order not to reassign obj 
    }

    // do other things
  }
一般情况

中,您必须使用Boolean 标志

答案 1 :(得分:1)

编译器不允许您以第一种方式编写,并且它抱怨“变量可能尚未初始化”。它会强制你把它作为null。在那种情况下,再次检查相同的null是多余的。不过第一个更好!因为我们应该使用尽可能少的变量。

Object obj=null;
while(true){
    if(obj == null) obj = new Object();
    //do other things
}

答案 2 :(得分:0)

有时可能会从其他地方为null分配对象。

因此检查null并分配。没关系。选择第一种方式

看起来根本没需要布尔值。但是这里是getach,如果你不想重新分配它,请使用布尔值并将其锁定(它会记住final关键字;)。

答案 3 :(得分:0)

如果你想在方法中进一步重用条件isObjAssigned,那么两者之间可能没有任何性能差异,然后使用局部变量进行检查,否则在null中检查它{ {1}}块应该是自解释的

答案 4 :(得分:0)

我更喜欢第一个:

Object obj;
while(true){
    if (obj == null) obj = new Object();
    //do other things
}

在第二个示例中,您将Boolean的值与Object相关联,这种方法也可能导致错误,因为您可能会意外设置{{1}的值1}}到Boolean,没有实例化true。 这样您就可以假设Object已根据Object值进行了实例化,并且您将获得Boolean

答案 5 :(得分:0)

第二种方法将抛出NullPointerException,因为您使用的是booleanjava.lang.Boolean)的对象版本。

而是使用boolean

但是,我建议使用第一种方法,否则可能存在对象分配和isObjAssigned标记不同步的风险。