如您所知,java.util.Objects
是
此类包含用于操作对象的静态实用程序方法。
其中一种方法是Objects.isNull()
。
我的理解是Objects.isNull()
将通过省略第二个=
来消除意外为对象分配空值的机会。
然而,API Note指出:
此方法可用作谓词,过滤器(Objects :: isNull)
我是否应该在 if语句中使用object == null
而不是Objects.isNull()
?
Objects.isNull()
应该仅限于谓词吗?
答案 0 :(得分:50)
应该在if语句中使用object == null而不是Objects.isNull()吗?
如果您查看IsNull
方法的source code,
/* Returns true if the provided reference is null otherwise returns false.*/
public static boolean isNull(Object obj) {
return obj == null;
}
它是一样的。没有区别。所以你可以安全地使用它。
答案 1 :(得分:30)
Objects.isNull旨在用于Java 8 lambda过滤。
编写
更容易,更清晰.stream().filter(Objects::isNull)
而不是写
.stream().filter(x -> x == null).
在一个if中,无论哪个都可以工作,使用== null可能更容易阅读,但最终它将归结为样式首选项。
答案 2 :(得分:10)
看看来源:
public static boolean isNull(Object obj) {
return obj == null;
}
要检查null
值,您可以使用:
Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Objects.isNull
适用于Predicate
的事实并不妨碍您如上所述使用它。
答案 3 :(得分:3)
我是否应该在 if语句中对Objects.isNull()使用object == null?
是的,一个原因是保持代码简单。在 if语句 object == null
内是明确且众所周知的。如果例如存在拼写错误,则不会导致任何不当行为。
我的理解是Objects.isNull()会通过省略第二个=来消除意外为对象分配空值的机会。
如果if (object = null) {}
省略 =
它将无法编译,或者在Boolean
对象的情况下会生成警告!实际上,没有理由在 if语句中使用Objects.isNull(object)
而不是object == null
。以下是两个并排的变体:
if (object == null) {
}
if (Objects.isNull(object)) {
}
Objects.isNull()应该仅限于Predicates吗?
可以说是的,它仅限于Predicates,尽管在任何地方都没有使用Objects.isNull()
的技术障碍。
来自public static boolean isNull(Object obj)
方法' javadoc:
@apiNoteThis方法存在用作java.util.function.Predicate,filter(Objects :: isNull)
因此,如果您将该方法用作而不是谓词,那么与简单object == null
相比,您实际上使用的是更复杂和繁琐的表达式。
以下是一个用于比较Objects.isNull(object)
List<String> list = Arrays.asList("a", "b", null, "c", null);
// As ready-made predicate
long countNullsWithPredicate = list.stream().filter(Objects::isNull).count();
// Lambda
long countNullsWithLambda = list.stream().filter(object -> object == null).count();
// Reimplement the Objects::isNull predicate
long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() {
@Override
public boolean test(Object obj) {
return obj == null;
}
}).count();
答案 4 :(得分:1)
在语义上没有什么区别,但是出于可读性考虑,我更喜欢以下内容而不是whatever == null
:
import static java.util.Objects.isNull;
// Other stuff...
if(isNull(whatever)) {
}