object==module 또는 null==object?
.null == object
보다 object == null
마크를 켜다
예:
void m1(Object obj ) {
if(null == obj) // Is this better than object == null ? Why ?
return ;
// Else blah blah
}
이유가 있나요 아니면 또 다른 신화인가요?도와주셔서 감사합니다.
종류의 C에게서 입니다.=
으로 하는 ==
if (object = null) {
를 왼쪽의 표기법 ==
도움이 않습니다.로 해야 하기 입니다.자바에서는 표현식이 필요하기 때문입니다.if
boolean
에, 가 「」이 「a」가 됩니다.boolean
이라면 (부울)을 사용하면 안 ==
(...)
다른 사람들이 말했듯이, 오타를 피하기 위해 C에서 배운 습관입니다.C에서도 경고를 줄 수 있는 경고 수준의 적절한 컴파일러를 기대합니다.말한 바와 같이 이 하면 Chandru의 null, Java의 null 에만 문제가 합니다.Boolean
(어느 쪽이든)에도 피연산자를 할 수 부호도 같습니다반전을 고려할 정도로 명료하게 생각하고 있다면 등호도 셀 수 있을 것입니다.)
언급되지 않은 것은 많은 사람들(저도 확실히 포함)이 이 문제를 발견한다는 것입니다.if (variable == constant)
보다 읽기 쉬운 형태 - 자신을 표현하는 더 자연스러운 방법입니다.이것이 C의 규약을 맹목적으로 베껴서는 안 되는 이유입니다.어떤 환경에서 도움이 될 수 있는 것이 다른 환경에서 유용하다고 가정하기 전에 항상 (여기서와 같이) 실천에 대해 질문해야 합니다.
이 「Java(1.5+)」인 를 제외하고, Java(에서는 큰 .Boolean
이 경우에도 이 방법은 편리할 수 있습니다.
if (object = null)
가 Java 1.5+인 경우 .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에서 합니다.할당은 표현식입니다.따라서 리터럴을 왼쪽에 배치하여 실수로 사용했을 때 덮어쓰지 않도록 합니다.=
대신==
.
그것은 왼쪽의 상수를 원하는 사람들을 위한 것이다.대부분의 경우 왼쪽에 상수가 있으면 Null Pointer가 차단됩니다.느려지는 예외(또는 다른 늘체크 있음).예를 들어 String method equals도 늘체크를 수행합니다.왼쪽에 상수가 있으면 추가 수표를 작성할 수 없습니다.또 다른 방법으로도 나중에 공연됩니다.왼쪽에 null 값이 있는 것은 일관성이 있을 뿐입니다.
예를 들어 다음과 같습니다.
String b = null;
"constant".equals(b); // result to false
b.equals("constant"); // NullPointerException
b != null && b.equals("constant"); // result to false
다음 코드와 비교해 보십시오.
String pingResult = "asd";
long s = System.nanoTime ( );
if ( null != pingResult )
{
System.out.println ( "null != pingResult" );
}
long e = System.nanoTime ( );
System.out.println ( e - s );
long s1 = System.nanoTime ( );
if ( pingResult != null )
{
System.out.println ( "pingResult != null" );
}
long e1 = System.nanoTime ( );
System.out.println ( e1 - s1 );
출력(복수 실행 후):
null != pingResult
325737
pingResult != null
47027
그러므로,pingResult != null
승자입니다.
그 교환 특성 때문에, 유일한 차이점은object == null
★★★★★★★★★★★★★★★★★」null == object
(요다판)은 인지기능입니다.독자가 코드를 읽고 소화하는 방법입니다.확실한 답은 모르지만, 개인적으로 검사하는 대상을 다른 대상과 비교하는 것이 타당하다면 다른 대상을 비교하는 것보다 더 낫다는 것을 알고 있습니다.먼저 주제부터 시작해서 비교할 값을 지정합니다.
일부 다른 언어에서는 이 비교 스타일이 더 유용합니다.
으로 '= '='라는 표기를 하는 것이 것 null == object
방어적 프로그래밍의 잘못된 행동입니다.이 특정 코드를 회피하는 더 좋은 방법은 junit 테스트를 통해 동작을 보증하는 것입니다."="을 놓칠 수 있는 실수는 메서드의 입력 인수에 의존하지 않습니다. 즉, 다른 사람이 이 API를 올바르게 사용하는지 여부에 의존하지 않으므로 junit test는 대신 이를 방지하기 위해 완벽합니다.어쨌든 동작을 확인하기 위해 junit 테스트를 작성해야 할 것입니다. 누락된 "="은 당연히 해당 범위에 포함됩니다.
다른 방법으로 쓰는 것이 요다 조건입니다.
자바어
String myString = null;
if (myString.equals("foobar")) { /* ... */ } //Will give u null pointer
요다 상태
String myString = null;
if ("foobar".equals(myString)) { /* ... */ } // will be false
언급URL : https://stackoverflow.com/questions/2369226/object-null-or-null-object
'programing' 카테고리의 다른 글
JSF backing bean 메서드에서 JSF 컴포넌트를 갱신할 수 있습니까? (0) | 2022.10.14 |
---|---|
$_REQUEST, $_GET, $_POST 중 어느 것이 가장 빠릅니까? (0) | 2022.10.14 |
오류 1452 MySQL 및 NodeJS.왜 데이터베이스가 내 테이블을 제대로 참조할 수 없는 거죠? (0) | 2022.10.14 |
특정 문자 뒤에 문자열 부분 제거 (0) | 2022.10.14 |
Java에서의 Ctrl+C 캡처 (0) | 2022.10.14 |