수표 null == object
보다 나은 사람에게서 들었어object == null
예 :
void m1(Object obj ) {
if(null == obj) // Is this better than object == null ? Why ?
return ;
// Else blah blah
}
이유가 있습니까 아니면 이것은 또 다른 신화입니까? 도와 줘서 고마워.
답변
이것은 아마도 이런 종류의 오타를 피하기 위해 C에서 배운 습관 일 것입니다 ( =
double 대신 single ==
) :
if (object = null) {
상수를 왼쪽에 두는 규칙은 ==
Java에서 실제로 유용하지 않습니다. Java에서는 표현식 if
의 boolean
값을 값으로 평가해야하기 때문에 상수가이면 boolean
어떤 식 으로든 컴파일 오류가 발생합니다. 인수. (그리고 그것이 부울이라면 ==
어쨌든 사용해서는 안됩니다 …)
답변
다른 사람들이 말했듯이 오타를 피하기 위해 C에서 배운 습관입니다. C에서도 경고를 줄만큼 충분히 높은 경고 수준의 괜찮은 컴파일러를 기대합니다. Chandru가 말했듯이 이러한 방식으로 Java의 null과 비교하면 유형의 변수를 사용하는 경우에만 문제가 발생합니다 Boolean
(샘플 코드에 없음). 이것은 매우 드문 상황이며 다른 곳에서 코드를 작성하는 방식을 변경할 가치가있는 상황은 아닙니다. (이 경우에도 피연산자를 뒤집는 것을 귀찮게하지 않을 것입니다. 그 반대를 고려할만큼 명확하게 생각하고 있다면 등호를 셀 수있을 것입니다.)
무엇 않은 언급하는 것은 많은 사람들이 (자신을 확실히 포함)을 찾을 수 있다는 것입니다 if (variable == constant)
그것은 자신을 표현하는 자연스러운 방법 – 더 읽을 수 있도록 양식을. 이것이 C의 관례를 맹목적으로 모방 하지 않는 이유 입니다. 한 환경에서 유용 할 수있는 것이 다른 환경에서 유용하다고 가정하기 전에 항상 관행에 대해 질문해야합니다.
답변
이것은 객체 유형이 인 경우를 제외하고는 Java (1.5+)에서 그다지 가치가 없습니다 Boolean
. 어떤 경우에도 이것은 여전히 편리 할 수 있습니다.
if (object = null)
객체가 있으면 Java 1.5 이상에서 컴파일 실패가 발생하지 Boolean
않지만 NullPointerException
런타임에 발생합니다.
답변
자바에는 타당한 이유가 없습니다.
다른 몇 가지 답변은 평등 대신 실수로 할당 할 수 있기 때문이라고 주장했습니다. 그러나 Java에서는 if에 부울이 있어야합니다.
if (o = null)
컴파일되지 않습니다.
이것이 Java에서 문제가 될 수있는 유일한 경우는 변수가 부울 인 경우입니다.
int m1(boolean x)
{
if (x = true) // oops, assignment instead of equality
답변
이것은 또한 다음과 밀접한 관련이 있습니다.
if ("foo".equals(bar)) {
NPE를 다루고 싶지 않은 경우 편리합니다.
if (bar!=null && bar.equals("foo")) {
답변
이 트릭 v = null
은 일종의 오타 를 방지하기위한 것입니다.
그러나 Java는 if()
조건으로 부울 표현식 만 허용 하므로 트릭이별로 의미가 없으므로 컴파일러는 어차피 오타를 찾습니다.
그래도 C / C ++ 코드에서는 여전히 귀중한 트릭입니다.
답변
같은 이유로 C에서 수행합니다. 할당은 표현식이므로 리터럴을 왼쪽에 배치하여 실수로 =
대신을 사용하는 경우 덮어 쓰지 않도록합니다 ==
.