0

这个问题很简单。

Object obj;

obj = new Object();

if(obj!=null) {
    // this means my object is *set*
}

另一个

Object obj;
Boolean objSet = false;

obj = new Object();
objSet = true;

if(objSet) {
    // this means my object is *set*
}

哪个更正确。我听说数据库和某些方法会以不同的方式起作用。

4

2 回答 2

6

“正确”不是首选词。如果它编译并做了它应该做的,那就是正确的。

作为有用的问题,我最好使用更直接的检查。添加布尔变量以避免执行== null检查意味着额外的(最小开销)、更多的行、难以阅读并且可能引入错误。

如果条件足够复杂以至于您需要明确它,则添加布尔变量(vg.,如果您必须检查一组条件中的所有/任何一个是否满足)。

顺便说一句,由于您正在使用Boolean而不是,因此如果您编码不好boolean,您就会引入 null 本身的可能性。objSet

于 2013-03-05T00:22:48.473 回答
3

两者都不正确

  • 从行为语义的角度来看,它们做同样的事情……假设它们被正确实现。

  • 从性能的角度来看,这种差异在整个应用程序的上下文中可能可以忽略不计。

  • 从空间使用的角度来看,差异可能可以忽略不计......除非objobjSet是字段,并且您有很多相关类的实例。

  • 从稳健性的角度来看(例如避免意外的 NPE),没有质量上的差异。如果您忘记进行测试,无论哪种情况,您都可以获得 NPE。(我猜如果您更改示例以包含更改的内容obj,那么带有单独标志的版本会更复杂,因此更难正确。但是如果您将逻辑封装在 setter 方法中,那么您只需要正确一次 ...)

所以真的,归结为哪个版本的代码更具可读性。这是主观的......所以“更正确”并没有进入它。大多数有经验的程序员可能会认出这个习惯用法并更喜欢第一个版本。

于 2013-03-05T00:24:08.740 回答