NULL 作为第八种“原始”数据类型

-3 java javac primitive-types java-8

由 Java 鲜为人知的数据类型“null”引起的无意识查询。

有人能够澄清“null”是否是 Java 语言保留的文字,以及它作为原始数据类型和数字值之间的差异吗?

NULL default_object_value; // a Syntax error
NULL acct_balance_at_westbank = null; // Another Syntax error

String aStrokeOfLuck = null; // a feasible variable declaration & assignment
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 7

根据 JLS 4.1,实际上有一种null.

\n
\n

“还有一种特殊的 null 类型,即表达式 null (\xc2\xa73.10.8, \xc2\xa715.8.1) 的类型,它没有名称。” - JLS 4.1

\n
\n

所以。

\n
    \n
  1. null是 Java 语言保留的文字。

    \n
  2. \n
  3. null表示值而不是类型。

    \n
  4. \n
  5. 的类型null无法命名。因此你的尝试失败了。

    \n

    (我什至不认为java.lang.Class空类型有反射表示......)

    \n
  6. \n
  7. JLS 表示 的类型既不null是原始类型也不是引用类型。

    \n
  8. \n
  9. 各种上下文允许null转换为任何引用类型的空值;例如

    \n
  10. \n
\n
\n

“最后,空类型的值(空引用是唯一这样的值)可以分配给任何引用类型,从而产生该类型的空引用。” - JLS 5.2

\n
\n

我想他们选择这种方式指定 null 类型是有一些技术原因的。也许这会使规范的其他部分变得更简单。我不知道。除非你是黑带型理论家,否则“为什么”问题很可能是无关紧要的。

\n
\n
\n

...它满足原始数据类型和数字值之间的差异?

\n
\n

我无法理解你问题的这一部分。

\n
\n

正如评论中提到的,NULL只是一个普通的标识符。Java 类库不会声明具有该名称的类,因此您很可能会遇到未解决的符号错误。您可以为自己声明一个类,但NULL就 Java 编译器或运行时而言,该类不会(也不能)表示 null 类型。

\n