【问题标题】:Printing null in java [duplicate]在java中打印null [重复]
【发布时间】:2011-09-07 05:03:34
【问题描述】:

在执行以下行时:

    System.out.println(null);

结果出来是null打印在控制台上。

为什么会这样?

【问题讨论】:

  • -1 - 这个问题可以通过阅读 javadoc 来回答。

标签: java printing null


【解决方案1】:

从 OpenJDK 1.6.0_22 的源码来看:

打印流:

public void println(Object x) {
    String s = String.valueOf(x);
    synchronized (this) {
        print(s);
        newLine();
    }
}

字符串:

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

【讨论】:

    【解决方案2】:

    实际上,至少在 java 版本 1.8.0 中,System.out.println(null); 不应该打印null。您会收到如下错误消息:

    对 println 的引用不明确,PrintStream 中的 println(char[]) 方法和 PrintStream 中的 println(String) 方法都匹配

    您必须按以下方式进行转换:System.out.println((String)null); 请参阅 coderanch 帖子 here。 我想你也可以通过System.out.println(null+""); 来完成同样的工作。

    【讨论】:

      【解决方案3】:

      因为这正是 Javadocs 所说的那样?

      http://download.oracle.com/javase/6/docs/api/java/io/PrintStream.html#print(java.lang.String)

      打印一个字符串。如果参数为空,则打印字符串“null”。

      【讨论】:

        【解决方案4】:

        它最终会调用String.valueOf(Object),它看起来像:

        public static String valueOf(Object obj) {
            return (obj == null) ? "null" : obj.toString();
        }
        

        【讨论】:

          【解决方案5】:

          当我查看 PrintStream 的 javadoc 时,我观察到(我在这里引用)

          打印

          public void print(String s)

          打印一个字符串。如果参数为空,则字符串“null”为 打印。否则,字符串的字符将转换为字节 根据平台的默认字符编码,而这些 字节完全按照 write(int) 方法的方式写入。 参数:s - 要打印的字符串

          希望这能回答你的问题..

          【讨论】:

            猜你喜欢
            • 2015-11-17
            • 2016-04-02
            • 2021-04-21
            • 2014-05-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-12-02
            • 2020-09-19
            相关资源
            最近更新 更多