理解 Java 中 null 和 '\u000' 的区别

Posted

技术标签:

【中文标题】理解 Java 中 null 和 \'\\u000\' 的区别【英文标题】: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 中提供其他信息。 【参考方案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 :)

【讨论】:

以上是关于理解 Java 中 null 和 '\u000' 的区别的主要内容,如果未能解决你的问题,请参考以下文章

java学习第十四天

java中创建一个String 问题

Java中正则表达式以及Pattern和Matcher类

Java Pattern的用法是啥

java中正则表达式

Java中HashMap和TreeMap的区别深入理解