理解 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' 的区别的主要内容,如果未能解决你的问题,请参考以下文章