【问题标题】:I don't understand why this simple statement isn't working我不明白为什么这个简单的语句不起作用
【发布时间】:2011-12-16 13:25:00
【问题描述】:

所以我基本上完成了一个程序,最后我将字符串从数组打印到文件。该数组可能包含空值,所以我在打印之前检查空值,但我一直在文件的最后以 1 个空值结束......

这是我用来检查 null 的代码

for(int i=0;i<array2.length;i++)
{
    if(array2[i] != null)
        out.println(array2[i]);
}

我知道该数组包含多个 null 实例,但只打印了 1 个。我尝试使用调试器,当array2[i] == null 时,它仍然进入了条件语句...

所以我添加了一个 println 语句来帮助我了解发生了什么。现在看起来像这样:

for(int i=0;i<array2.length;i++)
        {
            if(array2[i] != null)
            {
                System.out.println("Adding " + array2[i]);
                out.println(array2[i]);
            }

在将所有字符串值打印到控制台之后,它会打印“添加 null”,所以我知道它发生在这个 if 语句中。为什么会这样???

【问题讨论】:

  • 语句本身似乎没有任何问题 - 可能是打印的字符串的值实际上是“null”,而不是字符串为 null?
  • ...或者您可能在循环之后再调用一次“println”?
  • 你能发布你所有的代码吗?这看起来应该可以工作。
  • nylarlathotep 是对的!我更改了语句以检查字符串“null”,现在它不再打印了。现在我只需要弄清楚那个 null 是如何进入那里的......

标签: java string null


【解决方案1】:

调试器并不总是清楚它是否已进入if 条件。我不相信这段代码正在进入它可能出现的 if 条件,并且您的 null 可能来自另一行代码。

你可以把代码写成

for(ElementType e: array2.length)
    if(e != null)
        out.println("[" + e+ ']'); // extra text for debugging.
// I suspect your `null` will still be on a line of its own

【讨论】:

    【解决方案2】:

    您是否还缺少 if 语句的一组括号?

    for(int i=0;i<array2.length;i++) 
    { 
      if(array2[i] != null) 
      {
        out.println(array2[i]); 
      }
    } 
    

    【讨论】:

    • 如果 if 中的代码只有一行,大括号是可选的。
    • 嗯,不。如果是 1 行条件,则不一定需要括号
    • @RyanDavis:虽然这当然是真的,但我个人建议始终使用它们,以避免潜在的错误。
    • 看来我今天也学到了一些新东西!以前从未尝试过不使用括号!
    • @JavaGeek: for(int i=0;i&lt;array2.length;i++) if(array2[i] != null) out.println(array2[i]); 也是有效的,但最好留给快速调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多