programing

object==module 또는 null==object?

itsource 2022. 10. 14. 21:53
반응형

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) {

를 왼쪽의 표기법 == 도움이 않습니다.로 해야 하기 입니다.자바에서는 표현식이 필요하기 때문입니다.ifboolean에, 가 「」이 「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

반응형