if(String!= null)仍然通过?

时间:2012-01-16 07:42:44

标签: java string if-statement null

有时,或者好吧,我经常需要查看String是否为null,所以我使用这样的条件:

if(str != null) {
}

直到今天一直工作正常,现在即使是因为某种原因而无法通过的字符串也是无效的。有谁知道解释?还是解决方案?

编辑: 好的,所以由于某种原因,字符串似乎不是null,这是非常奇怪的,因为我从未定义它是什么,只是明确它存在。所以相反,字符串是单词“null”的字符串。我完全不知道它为什么会这样?当我这样做时:

String str;

那么它会自动为空,对吗?无论哪种方式,如果不是为什么它会成为字符串“null”?

7 个答案:

答案 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?

2)Stackoverflow - Where is null in memory?

3)Stackoverlfow - Null \u0000 in Java String?

答案 6 :(得分:0)

对于偏离主题感到抱歉,但我记得有一次因为';'而遇到类似情况(分号)潜入if条件的行尾。它让我真的很疯狂,因为无论我如何改变条件,下面的代码块总是执行...我在一小时后发现了问题,我将代码块复制并粘贴到文本编辑器中。