String表示它不为null但后来抛出NullPointerException

cc.*_*cc. 2 java string null nullpointerexception

我的天啊.我有一个小项目要做,字符串正在杀了我!

现在,我有一个String null(取自getParameter()servlet 调用的值).

问题是,我试图看看它是否为null,并且,即使它为null,在程序中告诉我不是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);
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

只有第四个条件正在发挥作用!剩下的事情(除了第二个,因为我说的这个条件是因为我绝望了)

我教过ID == nullID.equals(null)将会好,但不是.

编辑: 问题是,我从表单中获取ID的值(表格1通常说 - 通常).但在这种情况下,我使用的表单2没有任何ID输入,因此ID必须是null和不是"null"

Ste*_*202 10

ID.equals("null")
Run Code Online (Sandbox Code Playgroud)

显然,ID包含四个字母的字符串"null".所以它不是null("无"的价值).

有关常量的更多信息,请参阅Java词汇表null.基本上,如果变量null没有引用任何对象,则该变量具有该值.该字符串"null" 一个对象,即String类的实例,在这种情况下,该变量ID引用该对象.

(请注意,按照惯例,Java变量以小写字母开头,而像ID这样的首字母缩略词则写得完全小写,所以写id而不是ID.)


akf*_*akf 6

以下是您尝试过的四项测试.第一个和第四个是你应该需要的唯一的.

  • ID == null :字段'ID'是否为空?
  • ID == "null":字段'ID'的ref是否与新分配的String"null"相同?这通常应该返回false.
  • ID.equals(null):这应该总是返回假 - 概念上这是真的,你应该抛出一个NullPointerException.
  • ID.equals("null"):String'ID'的值是否与String"null" 的值相同?


JCa*_*sso 5

因为你从servlet获得字符串,我可以说这是正常的.

在某些情况下,Java会将空字符串转换为"null"字符串.

显然,您检索的字符串不是空值,但它是一个4字符串"null"

你为什么不试试调试?或者只是看看这回归了什么:

System.out.println("Length of ID:  " + ID.Length);
Run Code Online (Sandbox Code Playgroud)

编辑:如果你没有在这里得到异常,这意味着字符串不为空,并输出"ID:4的长度"将意味着字符串真的是ID ="null"

编辑2:好吧,似乎有些人不明白这里发生了什么,他们说在一些条件下,如何将空字符串变为"空"?他们发现它是riddiculus.我更喜欢他们在java上尝试这个:

String abc = null;
String xyz = "hello"; 
System.out.println(xyz + abc); 
Run Code Online (Sandbox Code Playgroud)

输出将是"hellonull"没有其他...

这里我们还有一个servlet.有一个空数据.Servlet将空数据发送为"null"它应该做什么?一个空字符串?来吧!!!"