首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查空值的最佳方法?

检查空值的最佳方法?
EN

Stack Overflow用户
提问于 2017-04-27 11:50:06
回答 3查看 2.2K关注 0票数 5

有些人建议将方法2用于null-check,但我不知道它背后的原因是什么,以及为什么应该首选它?

代码语言:javascript
复制
Date test1 = null; // test1 can be any object like String instead of Date
if (test1 != null) {
  System.out.println("Test");
}

方法2:-

代码语言:javascript
复制
Date test1 = null;
if (null != test1) {
  System.out.println("Test");
}
EN

回答 3

Stack Overflow用户

发布于 2017-04-27 12:18:56

Java7引入了java.lang.Objects,并提供了一些很好的小助手方法,比如requireNonNull()。Java8增加了一些内容,特别是isNull()nonNull()。它们本来是用于流()操作的;但当然,它们并不局限于该场景。

因此,另一种选择就是简单地依靠这些新的方法来作出这样的决定。简明扼要、可读性强、“标准”,并防止你在各处重复自己的检查。没有机会介绍和输入某种类型的字体。当然,使用另一个方法调用的开销最小。另一方面:如果你的方法被调用了数百万次,它无论如何都会被JIT编辑;这样的小方法可能很容易内联。

票数 3
EN

Stack Overflow用户

发布于 2017-04-27 13:11:41

这里没有真正的区别。这两种情况都是一样的。讨论很可能来自尤达条件,我们在这里写:

代码语言:javascript
复制
 null          ==         temp1
literal    comparison    variable 

这样我们就不会在编写= (赋值操作符)而不是== (比较)时犯错误,因为这样的代码在某些语言中编译得很好,可能会导致很难找到的逻辑错误(特别是新手程序员)。

但在您的情况下,您不需要使用该构造。这至少有两个原因:

  1. 您使用的是!=而不是==,因此只编写=而不是!=的可能性很小。
  2. 在Java中,if (expression)期望expression返回boolean值,所以即使错误地编写了= null,这样的代码也不会编译,因为表达式将返回null。这会阻止我们使用这种类型的错误运行代码。 Java条件只对boolean表达式(如if (stop == true) )有意义,但即使这样,我们也不应该编写if (true == stop),而应该跳过== true (或==false)部分,因为我们已经有了布尔值。因此,我们应该编写if (stop)if (!stop)

当您使用不同的语言进行编程时,使用这种风格是有意义的,并且您希望通过使用一种风格来简化您的生活,这种风格在一种语言中是有帮助的,同时也不会在其他语言中造成问题(即使它在其他语言中并不是真正必要的)。

但是,值得知道构造/样式在哪里是有用的或必要的,哪里不是,因为每种语言都有更好的方法来处理这一问题,就像在其他答案 Objects.nonNull中已经提到的那样。

票数 2
EN

Stack Overflow用户

发布于 2017-04-27 12:34:22

这有几个合理的理由。第一种是C语言中的C语言:

代码语言:javascript
复制
if(x = NULL) { ... }

..。(注:单个=)是一些开发人员可能会不小心犯的错误。

代码语言:javascript
复制
if(NULL = x) { ... }

..。导致编译器错误。所以,如果你有把null放在第一位的习惯,就更难犯这个错误了。

但是这个逻辑不适用于!=,所以继续将null放在第一位的唯一原因是为了一致性。

..。而在Java中,if(x = null)也是一个编译器错误,因为Java没有将赋值计算为值。

另一种情况是,将“预期”放在“实际”之前是常见的,即:

代码语言:javascript
复制
if("expected string".equals(string)) { ... }

因为"expected string"绝对不是null,所以当string == null时,这不能是NullPointerException,而string.equals("expected string")则是。

因此,一些程序员养成了将期望值放在首位的习惯。

我个人更喜欢读一些类似于英语句子的东西,对我来说:if(x == null)在这方面更好。

我们过去用来捕捉小bug和排字的一些技巧,由于单元测试习惯、首先避免空值以及明智地使用final变量而变得不那么必要。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43656949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档