Luc*_*s T 58 java compare java-8
如你所知,java.util.Objects是
此类包含用于对对象进行操作的静态实用程序方法.
其中一种方法是Objects.isNull().
我的理解是,Objects.isNull()通过省略第二个,可以消除意外地将空值分配给对象的可能性=.
但是,API Note指出:
此方法存在用作谓词,过滤器(Objects :: isNull)
会不会有任何理由/环境对我应该使用object == null了Objects.isNull()在if语句?
应该Objects.isNull()仅限于Predicates吗?
Sur*_*tta 59
应该在if语句中使用Object = is null而不是Objects.isNull()?
如果你看一下源代码的IsNull方法,
/* Returns true if the provided reference is null otherwise returns false.*/
public static boolean isNull(Object obj) {
return obj == null;
}
Run Code Online (Sandbox Code Playgroud)
这是相同的.没有区别.所以你可以安全地使用它.
小智 44
Objects.isNull旨在用于Java 8 lambda过滤.
写作更简单,更清晰
.stream().filter(Objects::isNull)
Run Code Online (Sandbox Code Playgroud)
而不是写
.stream().filter(x -> x == null).
Run Code Online (Sandbox Code Playgroud)
然而,在if中任何一个都可以工作,使用== null可能更容易阅读,但最终它将归结为样式首选项.
Men*_*ena 10
看看来源:
public static boolean isNull(Object obj) {
return obj == null;
}
Run Code Online (Sandbox Code Playgroud)
要检查null值,您可以使用:
Objects.isNull(myObject)null == myObject // avoids assigning by typomyObject == null // risk of typo这一事实Objects.isNull是为Predicates不阻止你使用它上面的.
是否有任何原因/情况我应该在if 语句中使用 object == null 而不是 Objects.isNull() ?
是的,原因之一是保持代码简单。在if 语句中 object == null是明确且众所周知的。例如,如果有错字,它不会导致任何不当行为。
我的理解是 Objects.isNull() 将通过省略第二个 = 来消除意外将空值分配给对象的机会。
如果省略了if (object = null) {}with ,则不会编译,或者在object 的情况下会生成警告!实际上没有理由在if 语句中使用over 。这是并排的两个变体: =BooleanObjects.isNull(object)object == null
if (object == null) {
}
if (Objects.isNull(object)) {
}
Run Code Online (Sandbox Code Playgroud)
Objects.isNull() 应该仅限于谓词吗?
可以说是的,它仅限于谓词,尽管在任何Objects.isNull()地方使用都没有技术障碍。
从public static boolean isNull(Object obj)方法的javadoc:
@apiNote此方法存在用作 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();
Run Code Online (Sandbox Code Playgroud)
小智 6
从语义上讲,没有区别,但为了可读性,我更喜欢以下内容whatever == null:
import static java.util.Objects.isNull;
// Other stuff...
if(isNull(whatever)) {
}
Run Code Online (Sandbox Code Playgroud)