문제

어머나. 나는 할 일이 약간 있고 현이 나를 죽이고있다!

자, 나는 문자열이 있습니다 null (호출에서 값을 가져옵니다 getParameter() 서블릿에서).

문제는, 나는 그것이 무효인지 확인하려고 노력하고 있으며, 널이더라도 프로그램에서 나에게 말하는 것이 아닙니다. null, 그러나 나중에 프로그램에서 변수를 사용할 때 변수가 null.

    System.out.println("In  " + ID); // in console: In null
    if ((ID == null) || (ID == "null") || ID.equals(null) || **ID.equals("null")**)
    {

       // after I put the 4th condition, the if is working right (WHAT IS THE PROBLEM?)            
        System.out.println("==null");
        this.ID = "";
    }
    else
    {
        System.out.println("!=null");
        this.ID = ID;
    }
    System.out.println("After " + ID);

내가 뭘 잘못하고 있니?

포스 조건 만 작동합니다! 나머지는 어떻습니까?

나는 가르쳤다 ID == null 또는 ID.equals(null) 괜찮을 것입니다. 그러나 아니요.

편집하다:문제는 양식에서 ID의 값을 얻는다는 것입니다 (양식 1은 일반적으로 말하자). 그러나이 경우 ID 입력이없는 양식 2를 사용하고 있으므로 ID는 null 그리고 아닙니다 "null"

도움이 되었습니까?

해결책

서블릿에서 끈을 얻으므로 이것이 정상이라고 말할 수 있습니다.

Java는 일부 조건에서 NULL 문자열을 "NULL"문자열로 변환합니다.

분명히 당신이 검색하는 문자열은 널 값이 아니지만 4 숯 문자열 "null"입니다.

디버깅을 해보지 않겠습니까? 또는 이것이 무엇을 반환하는지 확인하십시오.

System.out.println("Length of ID:  " + ID.Length);

편집 : 여기서 예외가 발생하지 않으면 문자열이 null이 아니며 "ID의 길이 : 4"도 출력 함을 의미합니다. 문자열이 실제로 id = "null"임을 의미합니다.

edit2 : 알겠습니다. 어떤 사람들은 여기서 무슨 일이 일어나고 있는지 이해하지 못하고 자바의 일부 조건에서 널 끈이 어떻게 "널"될 수 있다고 말합니까? 그들은 그것을 riDDiculus를 발견합니다. 나는 그들이 Java에서 이것을 시도하는 것을 선호합니다.

String abc = null;
String xyz = "hello"; 
System.out.println(xyz + abc); 

출력은 "Hellonull"이 아닙니다.

또한 여기에 서블릿이 있습니다. 널 데이터가 있습니다. Servlet은 NULL 데이터를 "NULL"으로 보냅니다. 어떻게해야합니까? 빈 줄? 어서 해봐요!!! "

다른 팁

ID.equals("null")

분명히, ID 4 글자 문자열이 포함되어 있습니다 "null". 그래서 그렇지 않습니다 null ( "아무것도"의 가치).

참조 자바 용어집 자세한 내용 null 끊임없는. 기본적으로 변수는 값이 있습니다 null 객체를 참조하지 않는 경우. 문자열 "null" ~이다 그러나 대상, 즉 클래스 인스턴스 , 이 경우 변수입니다 ID 이 개체를 참조하십시오.

(컨벤션에 의해 Java 변수는 소문자로 시작하고 ID와 같은 약어는 완전히 소문자로 작성되므로 쓰기 id 대신에 ID.)

다음은 시도한 네 가지 테스트입니다. 첫 번째와 네 번째는 필요한 유일한 것입니다.

  • ID == null : 필드가 'ID'가 널입니까?
  • ID == "null": 필드 'ID'에 대한 심판은 새로 할당 된 것과 동일합니다. String "없는"? 이것은 일반적으로 false를 반환해야합니다.
  • ID.equals(null): 이것은 항상 거짓을 반환해야합니다 - 개념적으로 이것은 당신이 NullPointerException.
  • ID.equals("null"): 값입니다 String 'ID'는 String "없는"?

널 객체가 아닌 문자열 "null"을 반환하는 것 같습니다.

결과가 실제로 널 인 경우

ID == null

언급 된 바와 같이 ID의 문자열 값은 널 객체보다는 "널"입니다.

==이 블로그를 사용하지 않고 문자열을 비교할 때 .equals를 사용해야합니다.이 블로그는 다음과 같이 설명합니다.http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

따라서 "NULL"은 Java에서 NULL과 같지 않습니다.

값이 서블릿에서 나오면 컨테이너가 빈 양식 필드를 빈 문자열로 변환 할 가능성이 높습니다. NULL 및 BLANK ( "")에 대해 확인해야합니다.

if (value==null || value.equals(""))

또는 String 's를 사용할 수 있습니다 isEmpty() 방법:

if (value==null || value.isEmpty())

변수 ID의 값이 문자열 리터럴 "null"인 경우 getParameter () 메소드를 사용하여 검색 할 때 코드의 이전 버그가 있다고 생각합니다. 문서에 따르면, 지정된 이름에 대한 값이없는 경우 getParameter () 메소드는 NULL (NULL 참조)을 반환해야합니다. 이것은 당신이 결과를 문자열로 변환하는 작업을 수행하는 어딘가에, 아마도 빈 문자열과 관련이있을 것입니다 (예 : ID + "";).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top