2015-10-14 91 views
2

如果尚未分配对象,我需要分配一个对象。Object == null vs boolean == false

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 
} 

这两个检查方法是一个更好的做法?

+3

两者都使用不正确的语法,他们不会做同样的事情。 – fabian

+0

是应用程序多线程?你不能使用单身模式吗? –

+0

@JordiCastilla不,它不是 –

回答

0

我宁愿第一个:

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

在第二个例子,你的BooleanObject而这种做法的价值也耦合会导致错误,因为你可以不小心设置Booleantrue的值,而没有实例化Object。 通过这种方式,您可以假定Object已被实例化,根据Boolean的值,您将获得NullPointerException

0

有时候Object可能会被分配到null以及其他地方。

因此检查空和分配。没关系。去第一路

看起来根本不需要布尔值。但是,如果你不想重新分配它并使用布尔值并锁定它(这会记住我的关键词final),那么这里就是gotachog;)。

0

可能不会有任何两者之间的性能差异,如果你想进一步重用条件isObjAssigned在你的方法,然后用本地变量来检查,否则检查,nullif块应该是不言而喻的

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标志

+0

事情是我不知道什么时候我会收到对象分配它,它是onLocationChanged - 谷歌地图v2 –

+0

@ user3553447那么为什么需要检查,只需分配它,当你收到的对象,如果收到对象为null,分配你自己的。 –

+0

我想将它从第一个位置移动到接收位置。 –

0

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

改为使用boolean

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

1

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

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