Java 对象==null vs布尔==false
如果尚未指定对象,则需要指定该对象Java 对象==null vs布尔==false,java,performance,object,if-statement,boolean,Java,Performance,Object,If Statement,Boolean,如果尚未指定对象,则需要指定该对象 Object obj; While(true){ if(obj == null) obj = new Object(); //do other things } 或 这两种检查方法中哪一种是更好的做法?有时对象可能会被分配为null 因此,检查null和assign。那很好。走第一条路 看起来根本不需要布尔值。但这里是gotach,如果您不想重新分配它,请使用布尔值并锁定它(这会记住我的final关键字;)。两者之间可能没有任何性能差异,如果
Object obj;
While(true){
if(obj == null) obj = new Object();
//do other things
}
或
这两种检查方法中哪一种是更好的做法?有时对象可能会被分配为
null
因此,检查null和assign。那很好。走第一条路
看起来根本不需要布尔值。但这里是gotach,如果您不想重新分配它,请使用布尔值并锁定它(这会记住我的
final
关键字;)。两者之间可能没有任何性能差异,如果您想在方法中进一步重用条件IsobaSigned
,请使用局部变量进行检查,否则,在if
块中将其检查为null
应该是自解释的上下文中最好的语法是将赋值从循环中拉出:
在更详细的例子中,例如
一般情况下,您必须使用
布尔标记。我更喜欢第一个:
Object obj;
while(true){
if (obj == null) obj = new Object();
//do other things
}
在第二个示例中,您将布尔值
与对象
耦合,这种方法也可能导致错误,因为您可能会意外地将布尔值
设置为真
,而不实例化对象
。
通过这种方式,您可以假设已根据布尔值实例化了对象
,您将得到NullPointerException第二种方法将抛出NullPointerException,因为您使用的是布尔值的对象版本(java.lang.Boolean
)
而是使用布尔值
但是,我建议使用第一种方法,否则可能会有对象赋值和标志不同步的风险。编译器将不允许您使用第一种方法编写,并且它会抱怨“变量可能尚未初始化”。这将迫使您将其设置为null。在这种情况下,再次检查相同的null是多余的。不过第一个更好!因为我们应该使用尽可能少的变量
Object obj=null;
while(true){
if(obj == null) obj = new Object();
//do other things
}
两者都使用了不正确的语法,而且它们做的事情也不一样。应用程序是多线程的吗?你不能使用单例模式吗?@JordiCastilla不,不是问题是我不知道什么时候我会收到分配给它的对象,它是onLocationChanged-谷歌地图v2@user3553447那么为什么需要检查呢?只要在接收对象时分配它,如果接收的对象为空,分配您自己的。我想将其从第一个位置设置为接收到的位置。
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
}
Object obj;
while(true){
if (obj == null) obj = new Object();
//do other things
}
Object obj=null;
while(true){
if(obj == null) obj = new Object();
//do other things
}