【问题标题】:Understanding the difference between null and '\u000' in Java理解 Java 中 null 和 '\u000' 的区别
【发布时间】:2012-08-25 02:35:11
【问题描述】:

我在一本书中读到(Bruce Eckel 的 Thinking in Java,第 4 版,第 47 页)null 等于 '\u000'。然后我想知道'\u000' 到底是什么意思。

根据我的理解,null 是什么都没有或没有任何东西。而'\u000' 则与此定义相矛盾。

谁能澄清这个关于null'\u000' 的问题?

【问题讨论】:

  • 大概是char null = '\u000';
  • 是的 Hachi。这本书是 Thinking in Java-Bruce Eckel。
  • char ‘\u0000’ (null) 在第 4 版的第 47 页。
  • @ashwinsakthi 在那种情况下,我想作者指的是 ASCII 值为 0 的字符,而不是 Java 的 null 关键字。
  • 请通过编辑来澄清您的问题,而不是在 cmets 中提供其他信息。

标签: java null char


【解决方案1】:

语言规范是定义 null 的地方,它说

还有一种特殊的 null 类型,即表达式 null 的类型,它没有名称。因为 null 类型没有名字,所以不可能声明一个 null 类型的变量或强制转换为 null 类型。空引用是空类型表达式的唯一可能值。空引用始终可以转换为任何引用类型。在实践中,程序员可以忽略 null 类型,只是假装 null 只是一个可以是任何引用类型的特殊文字。 --Link to documentation (Section 4.1)

null 类型有一个值,即 null 引用,由文字 null 表示,它由 ASCII 字符组成。空文字始终是空类型。 --Link to documentation (Section 2.3)

听起来像是一个循环定义,但null 的值是空引用 本身——只是另一个指针。空引用的值并不真正相关,可能取决于实现者,但可能是零或其他不能与另一个对象地址混淆的值。

这里可能会引起混淆,因为有一个名为空字符的字符值,其值为\u0000。这是 char 类型的默认值。

【讨论】:

  • @waldyr.ar - 对不起。我还是不明白。你能用简单的英语或图表解释一下吗?顺便说一句,链接不再起作用了。
  • @waldyr.ar - 你能解释一下\u000 在这条评论的代码中的用途吗?我在这里发布代码是因为 SO 可能会否决我。 private final String path; private static enum PathStatus { INVALID, CHECKED }; private transient PathStatus status = null; final boolean isInvalid() { if (status == null) { status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED : PathStatus.INVALID; } return status == PathStatus.INVALID; }
  • \u0000 是 Unicode 中的空字符。它与Java 中的null 不同,但具有相似的含义。 @testerjoe2 你的代码意思是如果路径包含空字符,它的状态是INVALID,否则它是CHECKED
【解决方案2】:

\u000 是 ASCII 码为 0 的字符的 unicode 表示,但与 Java 使用的 null 无关。

【讨论】:

    【解决方案3】:

    '\u0000' 十进制等效值为 00 等效字符为 NUL。

    来自 Javadoc 中的字符:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Character.html

    static char MIN_VALUE 
          The constant value of this field is the smallest value of type char, '\u0000'. 
    

    这是Unicode 值,在CHAR 中相当于NULL,即它是NULL CHARACTER,而不是文字NULL。

    【讨论】:

    • NULL字符的意义是什么?
    【解决方案4】:

    null 是文字,您可以看到说明 实际上,您可以简单地假装它“只是一个可以是任何引用类型的特殊文字”。

    正如@assylias 所说,你读到的内容肯定不是来自 java :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2013-10-19
      • 2017-10-08
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多