2

我的天啊。我有一个小项目要做,弦乐正在杀死我!

现在,我有一个字符串(从 servletnull调用中获取值)。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)。但在这种情况下,我使用的表格 2 没有任何 ID 输入,所以 ID 必须是null而不是"null"

4

7 回答 7

10
ID.equals("null")

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

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

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

于 2009-10-07T19:28:59.653 回答
6

这是您尝试过的四个测试。第一个和第四个是您唯一需要的。

  • ID == null:字段“ID”是否为空?
  • ID == "null":字段“ID”的引用是否与新分配的String“null”相同?这通常应该返回 false。
  • ID.equals(null): this 应该总是返回 false - 从概念上讲,如果 this 曾经是真的,你应该抛出一个NullPointerException.
  • ID.equals("null"): “ID”的值与“null”String的值相同吗?String
于 2009-10-07T19:34:01.640 回答
5

由于您从 servlet 获取字符串,我可以说这是正常的。

Java 在某些条件下将空字符串转换为“空”字符串。

显然您检索的字符串不是空值,而是一个 4 字符字符串“null”

你为什么不尝试调试?或者看看这会返回什么:

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

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

EDIT2:好吧,似乎有些人不明白这里发生了什么,他们说在Java中的某些情况下,空字符串如何为“空”?他们觉得这很可笑。我更喜欢他们在 java 上试试这个:

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

输出将是“hellonull”没有别的......

同样在这里我们有一个servlet。有一个空数据。Servlet 将 null 数据作为“null”发送它应该怎么做?一个空字符串?来吧!!!"

于 2009-10-07T19:37:44.303 回答
2

看起来它返回字符串“null”而不是 Null 对象。

于 2009-10-07T19:27:47.800 回答
0

如果您的变量 ID 的值是字符串文字“null”,那么我猜想当您使用 getParameter() 方法检索代码时,代码中早先存在错误。根据文档,如果指定名称没有值,则 getParameter() 方法应该返回 null (空引用)。这表明您正在某处执行将结果转换为字符串文字的操作,可能与空字符串连接(即 ID + "" ; )

于 2009-10-07T23:24:30.300 回答
0

如果结果实际上是 null 然后

ID == null

就足够了,但如前所述,ID 的字符串值显然是“null”而不是 null 对象。

比较字符串时应该使用 .equals 而不是 == 这个博客解释了更多关于他的信息: http ://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

因此,在 Java 中,“null”不等于 null。

于 2009-10-07T19:33:23.590 回答
0

如果值来自 Servlet,则容器很可能会将空表单字段转换为空字符串。您应该检查 null 和空白 ("")。

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

或者,您可以使用 String 的isEmpty()方法:

if (value==null || value.isEmpty())
于 2009-10-07T20:04:03.593 回答