會不會有任何理由/情形爲此我應該在if語句使用對象== NULL超過Objects.isNull()?
是的,一個原因是保持代碼簡單。在之內如果陳述object == null
是清楚和衆所周知的。如果存在拼寫錯誤,它不會導致任何不當行爲。
我的理解是Objects.isNull()會通過省略second =來消除意外地將null值分配給對象的機會。
如果有if (object = null) {}
與省略=
它不會編譯或將在Boolean
對象的情況下產生的警告!其實沒有理由使用Objects.isNull(object)
而不是object == null
如果聲明。這裏有兩個變種並排:
if (object == null) {
}
if (Objects.isNull(object)) {
}
是否應Objects.isNull()僅限於專門的謂詞?
可以說是的,它僅限於Predicates,儘管在任何地方都沒有技術障礙使用Objects.isNull()
。
從public static boolean isNull(Object obj)
方法的Javadoc:
@apiNoteThis方法存在被用作java.util.function.Predicate,過濾器(對象::參考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();
there's Objects.requireNonNull(T obj); btw –
如果你所擔心的只是偶然的分配,你可以簡單地使用'if(null == variable)'... – Holger
@Holder,你有什麼意外的擔心嗎?這是Java。你會得到一個類型錯誤。 –