OMG。我有一个小项目要做,而且Strings正在杀了我!
现在,我有一个null
的字符串(取自从servlet调用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"
答案 0 :(得分:10)
ID.equals("null")
显然,ID
包含四个字母的字符串"null"
。所以它不是null
(“无”的值)。
有关null
常量的更多信息,请参阅Java glossary。基本上,如果变量没有引用任何对象,则其值为null
。字符串"null"
是对象,但是,类String的实例,在这种情况下,变量ID
引用此对象。
(请注意,按照惯例,Java变量以小写字母开头,而像ID这样的首字母缩写词写得完全小写,因此请写id
而不是ID
。)
答案 1 :(得分:6)
以下是您尝试过的四项测试。第一个和第四个是你应该需要的唯一的。
ID == null
:字段'ID'null?ID == "null"
:字段“ID”的引用与新分配的String
“null”相同吗?这通常应该返回false。ID.equals(null)
:这应该总是返回false - 从概念上说这是真的,你应该抛出NullPointerException
。ID.equals("null")
:String
'ID'的值是否与String
“null”的值相同?答案 2 :(得分:5)
因为从servlet获取字符串,我可以说这是正常的。
Java在某些条件下将空字符串转换为“null”字符串。
显然,您检索的字符串不是空值,但它是一个4字符串“null”
你为什么不尝试调试?或者只是看看这会带来什么:
System.out.println("Length of ID: " + ID.Length);
编辑:如果你没有在这里得到异常,这意味着字符串不为空,并且输出“ID:4的长度”将意味着字符串真的是ID =“null”
EDIT2:好吧,似乎有些人不明白这里发生了什么,他们说在Java的某些条件下,如何将空字符串设为“null”?他们发现它是riddiculus。我更喜欢他们在java上尝试这个:
String abc = null;
String xyz = "hello";
System.out.println(xyz + abc);
输出将是“hellonull”没有别的......
此外,我们还有一个servlet。有一个空数据。 Servlet将空数据发送为“null”它应该做什么?一个空字符串?来吧!!! “
答案 3 :(得分:2)
看起来它返回String“null”而不是Null对象。
答案 4 :(得分:0)
如果结果实际上是null,那么
ID == null
就足够了,但正如所提到的,ID的字符串值显然是“null”而不是null对象。
在比较字符串而不是使用==时,您应该使用.equals 这个博客解释了他的更多信息: http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/
因此,在Java中,“null”不等于null。
答案 5 :(得分:0)
如果值来自Servlet,则容器很可能将空表单字段转换为空字符串。你应该检查null和空白(“”)。
if (value==null || value.equals(""))
或者,您可以使用String的isEmpty()
方法:
if (value==null || value.isEmpty())
答案 6 :(得分:0)
如果你的变量ID的值是字符串文字“null”,那么我猜你在使用getParameter()方法检索它时代码中有一个bug。根据文档,如果没有指定名称的值,则getParameter()方法应返回null(空引用)。这表明你正在做一个将结果转换为字符串文字的操作,或许用空字符串(即ID +“”;)