NULL 作为第八种“基元”数据类型 [closed]

NULL as an eighth 'primitive' data type [closed]

提问人:Jim W. Moch 提问时间:10/16/2023 最后编辑:Mark RotteveelJim W. Moch 更新时间:10/17/2023 访问量:87

问:


想改进这个问题吗?通过编辑这篇文章来添加详细信息并澄清问题。

上个月关闭。

由 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
爪哇岛 爪哇-8 爪哇 基元类型

评论

4赞 Sweeper 10/16/2023
什么是“作为原始数据类型和数字值满足的差距”?
0赞 Iłya Bursov 10/16/2023
null 不是数据类型,它是特殊的文字,可以用作任何引用类型的
1赞 Reilas 10/16/2023
null 值不能用于基元数据类型,只能用于 Objects
1赞 Holger 10/16/2023
代码示例中没有语法错误。除非创建名为 的类,否则将收到有关未解析标识符的错误。如果创建名为 的类,则代码将通过。换句话说,它在语法上是有效的,但它能否被编译取决于环境。这与示例的最后一行没有什么不同,后者取决于类上的存在。从语法上讲,您编造的标识符和众所周知的标识符之间没有区别。NULLNULLStringNULLString
2赞 Holger 10/16/2023
而且,顺便说一句,你的计数已经关闭了。撇开 null 不是基元类型不谈,已经有八种基元类型,分别是 、 、 、 、 和 。booleanbyteshortcharintlongfloatdouble

答:

7赞 Stephen C 10/16/2023 #1

根据 JLS 4.1,实际上有一种类型。null

“还有一种特殊的 null 类型,即表达式 null 的类型(§3.10.8、§15.8.1),它没有名称。”- JLS4.1

所以。

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

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

  3. 的类型无法命名。因此,你这样做的尝试失败了。null

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

  4. JLS 表示 的类型不是基元类型也不是引用类型。null

  5. 各种上下文允许转换为任何引用类型的 null 值;例如:null

“最后,可以将 null 类型的值(null 引用是唯一的此类值)分配给任何引用类型,从而产生该类型的 null 引用。”- JLS5.2

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


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

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


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

评论

1赞 Holger 10/16/2023
你的假设是正确的。null 类型没有表示形式,并且由于无法调用引用,因此不会错过它。java.lang.ClassgetClass()null