String은 NULL이 아니라고 말하지만 나중에 NullPointerException을 던집니다.
-
20-09-2019 - |
문제
어머나. 나는 할 일이 약간 있고 현이 나를 죽이고있다!
자, 나는 문자열이 있습니다 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 == 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 + "";).