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

56

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

据我理解,null代表没有任何东西或缺失,而'\u000'与这个定义相矛盾。

有谁能解释一下关于null'\u000'的问题吗?


可能是这样的:char null = '\u000'; - Hachi
是的Hachi,这本书是《Java编程思想》- Bruce Eckel。 - ashwinsakthi
第四版第47页中的字符'\u0000'(null)。 - ashwinsakthi
在这种情况下,我想作者指的是ASCII值为0的char,而不是Java的null关键字。 - assylias
2
请通过编辑问题来澄清,而不是在评论中提供额外的信息。 - Raedwald
4个回答

27

在语言规范中定义了null,并且它说:

还有一种特殊的null类型,表达式null的类型,它没有名称。由于null类型没有名称,因此不可能声明null类型的变量或将其强制转换为null类型。null引用是null类型表达式唯一可能的值。null引用始终可以转换为任何引用类型。在实践中,程序员可以忽略null类型,并假装null只是一个可以是任何引用类型的特殊文字。 --文档链接(第4.1节)

null类型有一个值,即null引用,由ASCII字符组成的文字null表示。null文字始终是null类型。 --文档链接(第2.3节)

这听起来有点循环定义,但null的值就是null引用本身——另一个指针。null引用的值并不重要,并且可能取决于实现者,但零或其他不能与另一个对象地址混淆的值很可能会被选择。

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


@waldyr.ar - 抱歉,我还是不明白。你能用简单的英语或者图示来解释一下吗?顺便说一句,链接已经失效了。 - MasterJoe
@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; } - MasterJoe
在Unicode中,\u0000是空字符。它与Java中的null不同,但意思相似。@testerjoe2,你的代码意味着如果路径包含空字符,则状态为“INVALID”,否则为“CHECKED”。 - GregT

17

\u000 是 ASCII 码为 0 的字符的 Unicode 编码表示,但它与 Java 中使用的 null 没有关系。


11

'\u0000'的十进制等价值为00,字符等价值为NUL。

来自Javadoc中的Character: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 字符,而不是字面上的 NULL。


NULL字符的意义是什么? - Gaurav

1

null是一个字面量,你可以看到规范中说道:实际上你可以简单地假装它是“仅仅是任何引用类型的特殊字面量”。

正如@assylias所说,你读到的肯定不是Java相关的内容 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接