有些人建议将方法2用于null-check,但我不知道它背后的原因是什么,以及为什么应该首选它?
Date test1 = null; // test1 can be any object like String instead of Date
if (test1 != null) {
System.out.println("Test");
}方法2:-
Date test1 = null;
if (null != test1) {
System.out.println("Test");
}发布于 2017-04-27 12:18:56
Java7引入了java.lang.Objects,并提供了一些很好的小助手方法,比如requireNonNull()。Java8增加了一些内容,特别是isNull()和nonNull()。它们本来是用于流()操作的;但当然,它们并不局限于该场景。
因此,另一种选择就是简单地依靠这些新的方法来作出这样的决定。简明扼要、可读性强、“标准”,并防止你在各处重复自己的检查。没有机会介绍和输入某种类型的字体。当然,使用另一个方法调用的开销最小。另一方面:如果你的方法被调用了数百万次,它无论如何都会被JIT编辑;这样的小方法可能很容易内联。
发布于 2017-04-27 13:11:41
这里没有真正的区别。这两种情况都是一样的。讨论很可能来自尤达条件,我们在这里写:
null == temp1
literal comparison variable 这样我们就不会在编写= (赋值操作符)而不是== (比较)时犯错误,因为这样的代码在某些语言中编译得很好,可能会导致很难找到的逻辑错误(特别是新手程序员)。
但在您的情况下,您不需要使用该构造。这至少有两个原因:
!=而不是==,因此只编写=而不是!=的可能性很小。if (expression)期望expression返回boolean值,所以即使错误地编写了= null,这样的代码也不会编译,因为表达式将返回null。这会阻止我们使用这种类型的错误运行代码。
Java条件只对boolean表达式(如if (stop == true) )有意义,但即使这样,我们也不应该编写if (true == stop),而应该跳过== true (或==false)部分,因为我们已经有了布尔值。因此,我们应该编写if (stop)或if (!stop)。当您使用不同的语言进行编程时,使用这种风格是有意义的,并且您希望通过使用一种风格来简化您的生活,这种风格在一种语言中是有帮助的,同时也不会在其他语言中造成问题(即使它在其他语言中并不是真正必要的)。
但是,值得知道构造/样式在哪里是有用的或必要的,哪里不是,因为每种语言都有更好的方法来处理这一问题,就像在其他答案 Objects.nonNull中已经提到的那样。
发布于 2017-04-27 12:34:22
这有几个合理的理由。第一种是C语言中的C语言:
if(x = NULL) { ... }..。(注:单个=)是一些开发人员可能会不小心犯的错误。
if(NULL = x) { ... }..。导致编译器错误。所以,如果你有把null放在第一位的习惯,就更难犯这个错误了。
但是这个逻辑不适用于!=,所以继续将null放在第一位的唯一原因是为了一致性。
..。而在Java中,if(x = null)也是一个编译器错误,因为Java没有将赋值计算为值。
另一种情况是,将“预期”放在“实际”之前是常见的,即:
if("expected string".equals(string)) { ... }因为"expected string"绝对不是null,所以当string == null时,这不能是NullPointerException,而string.equals("expected string")则是。
因此,一些程序员养成了将期望值放在首位的习惯。
我个人更喜欢读一些类似于英语句子的东西,对我来说:if(x == null)在这方面更好。
我们过去用来捕捉小bug和排字的一些技巧,由于单元测试习惯、首先避免空值以及明智地使用final变量而变得不那么必要。
https://stackoverflow.com/questions/43656949
复制相似问题