Java null 확인 .equals () 대신 == 사용 .equals () 대신 ==을 사용해야한다고 들었습니다.

Java에서는 null 검사를 할 때 .equals () 대신 ==을 사용해야한다고 들었습니다. 그 이유는 무엇입니까?



답변

완전히 다른 두 가지입니다. ==변수에 포함 된 개체 참조 (있는 경우)를 비교합니다. 평등이 의미하는 바에 대한 계약에 따라 .equals()두 개체가 동일한 지 확인합니다 . 계약에 따라 두 개의 서로 다른 개체 인스턴스가 “동일”할 수 있습니다. 그리고 equals메서드 이기 때문에 null참조에서 호출하려고 하면 NullPointerException.

예를 들면 :

class Foo {
    private int data;

    Foo(int d) {
        this.data = d;
    }

    @Override
    public boolean equals(Object other) {
        if (other == null || other.getClass() != this.getClass()) {
           return false;
        }
        return ((Foo)other).data == this.data;
    }

    /* In a real class, you'd override `hashCode` here as well */
}

Foo f1 = new Foo(5);
Foo f2 = new Foo(5);
System.out.println(f1 == f2);
// outputs false, they're distinct object instances

System.out.println(f1.equals(f2));
// outputs true, they're "equal" according to their definition

Foo f3 = null;
System.out.println(f3 == null);
// outputs true, `f3` doesn't have any object reference assigned to it

System.out.println(f3.equals(null));
// Throws a NullPointerException, you can't dereference `f3`, it doesn't refer to anything

System.out.println(f1.equals(f3));
// Outputs false, since `f1` is a valid instance but `f3` is null,
// so one of the first checks inside the `Foo#equals` method will
// disallow the equality because it sees that `other` == null


답변

당신이 호출 할 경우 .equals()null당신은 얻을 것이다NullPointerException

따라서 항상 적용되는 메서드를 호출하기 전에 nullity를 확인하는 것이 좋습니다.

if(str!=null && str.equals("hi")){
 //str contains hi
}  

참조


답변

허용 된 답변 ( https://stackoverflow.com/a/4501084/6276704 ) 외에 :

Java 1.7 이후로 null 일 수있는 두 개체를 비교하려면 다음 함수를 권장합니다.

Objects.equals(onePossibleNull, twoPossibleNull)

java.util.Objects

이 클래스는 개체에서 작동하기위한 정적 유틸리티 메서드로 구성됩니다. 이러한 유틸리티에는 개체의 해시 코드를 계산하고, 개체에 대한 문자열을 반환하고, 두 개체를 비교하기위한 null-safe 또는 null 허용 메서드가 포함됩니다.

이후 : 1.7


답변

Java 0 또는 null은 객체가 아닌 단순 유형입니다.

equals () 메소드는 단순 유형에 대해 빌드되지 않습니다. 단순 유형은 ==와 일치 할 수 있습니다.


답변

foo.equals(null)

foo가 null이면 어떻게 되나요?

NullPointerException이 발생합니다.


답변

Object 변수가 null이면 equals () 메서드를 호출 할 수 없으므로 null 객체 참조 검사가 적절합니다.


답변

null 개체 참조에 대해 equals를 호출하면 null 포인터 예외가 발생합니다.