有时,或者好吧,我经常需要查看String是否为null,所以我使用这样的条件:
if(str != null) {
}
直到今天一直工作正常,现在即使是因为某种原因而无法通过的字符串也是无效的。有谁知道解释?还是解决方案?
编辑: 好的,所以由于某种原因,字符串似乎不是null,这是非常奇怪的,因为我从未定义它是什么,只是明确它存在。所以相反,字符串是单词“null”的字符串。我完全不知道它为什么会这样?当我这样做时:
String str;
那么它会自动为空,对吗?无论哪种方式,如果不是为什么它会成为字符串“null”?
答案 0 :(得分:9)
解释是您的诊断不正确。如果str
为null,则if
语句的主体将不会执行 - 就像那样简单。你还没有说过你如何确认str
是 null但该代码仍在执行 - 如果是因为你看到了NullPointerException
那里你可能仍然会得到各种各样的原因。特别是,它很可能是由于null
块中的if
时不同的表达式被取消引用。
或者,str
是否有其他线程修改的非局部变量?
编辑:请注意,我一直在假设您知道null和对空字符串的引用之间的区别 - 您真的在谈论str
的值为null,对吧?如果你在谈论空字符串,这是一个非常不同的问题。
答案 1 :(得分:1)
基于你的null为小写,我假设你使用的是java或C#。
if语句执行的最经典的方法,当它显然是错误的时候是你不小心将分号放在最后。喜欢这个
if (false);
{
System.out.println("How can this be happening!?");
}
我建议您仔细查看if语句,并根据需要将printlns放在if和else子句中。我保证,当str为null时,if(str!= null)肯定不会运行。
答案 2 :(得分:1)
可能的原因是在多行条件块中完全忽略大括号:
if(str != null)
callSomeMethod();
System.out.println("length=" + str.length());
在这个经典的(和经典的)示例中,System.out.println将始终执行,因为它等同于:
if(str != null) {
callSomeMethod();
}
System.out.println("length=" + str.length());
-
想到另一个可能的陷阱:
if(str != null) {
System.out.println("str=" + str);
}
如果打印:
str=null
那么str的值可能是“null”(四个字符的单词“null”)。
答案 3 :(得分:1)
无论哪种方式,如果不是为什么它会成为字符串“null”?
如果您遇到值为“null”的字符串(4个字符的单词,而不是空引用),那么您或某人已将该字符串设置为“n” - “u” - “l” - “l ”。你可能没有意义地做到了。如果你的意思是:
str = null
您可能输入了以下内容:
str = "null"
编译并运行此测试程序,然后取出str = "null"
行上的引号。编译并再次运行 - 您将看到不同的行为。
public class shortfile {
public static void main(String[] argv) {
String str;
str = "null";
if (str == null) {
System.out.println("str is really a null reference");
}
else {
int len = str.length();
System.out.println("We set str to the literal word null");
System.out.println("str's length is " + len);
}
}
}
答案 4 :(得分:0)
检查null后我会检查长度:
if(stringVar == null || stringVar.length() == 0) { /* DO STUFF */ }
为了让生活更轻松,您可以制作扩展方法:
public static boolean notEmpty(String s)
{
return (s != null && s.length() > 0);
}
答案 5 :(得分:0)
这可能是因为空字符串或带有空格字符的字符串。使用以下代码:
if(str != null && !str.trim().isEmpty()) {
}
编辑:对于误读并提交快速解决方案感到抱歉,我赶紧上班。
因为' null'由不同的编程语言或库解释。以下是一些有趣的链接:
1)Stackoverflow - What is null in Java?
答案 6 :(得分:0)
对于偏离主题感到抱歉,但我记得有一次因为';'而遇到类似情况(分号)潜入if条件的行尾。它让我真的很疯狂,因为无论我如何改变条件,下面的代码块总是执行...我在一小时后发现了问题,我将代码块复制并粘贴到文本编辑器中。