[java] java.util.Objects.isNull 대 객체 == null

아시다시피 java.util.Objects입니다

이 클래스는 개체에서 작동하기위한 정적 유틸리티 메서드로 구성됩니다.

이러한 방법 중 하나는 Objects.isNull().

내 이해는 Objects.isNull()두 번째를 생략하여 실수로 null 값을 객체에 할당 할 가능성을 제거 한다는 것 =입니다.

그러나 API Note는 다음과 같이 설명합니다.

이 메서드는 조건 자, filter (Objects :: isNull)로 사용하기 위해 존재합니다.

내가 사용해야하는 어떤 이유 / 상황이있을 것 object == null이상 Objects.isNull()if 문 ?

Objects.isNull()술어에만 국한 되어야합니까 ?



답변

if 문에서 Objects.isNull ()보다 object == null을 사용해야합니까?

당신이 보면 소스 코드IsNull방법,

 /* Returns true if the provided reference is null otherwise returns false.*/

 public static boolean isNull(Object obj) {
     return obj == null;
 }

동일합니다. 다른 점이 없다. 따라서 안전하게 사용할 수 있습니다.


답변

Objects.isNull Java 8 람다 필터링 내에서 사용하기위한 것입니다.

작성하는 것이 훨씬 쉽고 명확합니다.

.stream().filter(Objects::isNull)

쓰는 것보다 :

.stream().filter(x -> x == null).

if그러나 성명 내 에서는 둘 다 작동합니다. 를 사용 == null하면 읽기가 더 쉬울 수 있지만 결국에는 선호하는 스타일로 귀결 될 것입니다.


답변

출처를보십시오 :

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의 위로 사용하지 못하도록하지 않습니다.


답변

if 문 에서 Objects.isNull () 위에 object == null을 사용해야하는 이유 / 상황이 있습니까?

예, 한 가지 이유는 코드를 단순하게 유지하는 것입니다. 내 문이 경우 object == null 명확하고 잘 알려져있다. 예를 들어 오타가 있으면 오작동으로 이어질 수 없습니다.

내 이해는 Objects.isNull ()이 두 번째 =를 생략하여 실수로 객체에 null 값을 할당 할 가능성을 제거한다는 것입니다.

이 경우 if (object = null) {}생략 = 이 컴파일되지 않습니다거나 경우에 경고를 생성합니다 Boolean물체! 실제로 if 문 내에서 Objects.isNull(object)over 사용할 이유가 없습니다 . 다음은 두 가지 변형입니다.object == null

if (object == null) {
}

if (Objects.isNull(object)) {
}

Objects.isNull ()은 술어에만 한정되어야합니까?

예라고 말할 수 있습니다 Objects.isNull(). 모든 곳 에서 사용하는 데 기술적 장애물이 없지만 전적으로 술어에만 국한됩니다 .

로부터 public static boolean isNull(Object obj)메소드의 javadoc는 :

@apiNote이 메소드는 java.util.function.Predicate, filter (Objects :: isNull)로 사용하기 위해 존재합니다.

따라서이 메서드를 술어가 아닌 것으로 사용하면 실제로 간단한 .NET에 비해 더 복잡하고 성가신 표현식을 사용하는 것 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();


답변

의미 상 차이는 없지만 가독성을 위해 다음을 선호합니다 whatever == null.

import static java.util.Objects.isNull;

// Other stuff...

if(isNull(whatever)) {

}


답변