我在一本书中读到(Bruce Eckel的《Java编程思想》第4版,第47页),null
等于'\u000'
。然后我想知道'\u000'
到底是什么意思。
据我理解,null代表没有任何东西或缺失,而'\u000'
与这个定义相矛盾。
有谁能解释一下关于null
和'\u000'
的问题吗?
在语言规范中定义了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的默认值。
\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; }
- MasterJoenull
不同,但意思相似。@testerjoe2,你的代码意味着如果路径包含空字符,则状态为“INVALID”,否则为“CHECKED”。 - GregT\u000
是 ASCII 码为 0 的字符的 Unicode 编码表示,但它与 Java 中使用的 null
没有关系。
'\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
是一个字面量,你可以看到规范中说道:实际上你可以简单地假装它是“仅仅是任何引用类型的特殊字面量”。
正如@assylias所说,你读到的肯定不是Java相关的内容 :)
char null = '\u000';
- Hachi