gpt4 book ai didi

java - 为什么 Eclipse 说 null 是原始类型?

转载 作者:太空狗 更新时间:2023-10-29 22:58:23 25 4
gpt4 key购买 nike

我在 Eclipse Mars 中写这行代码是为了搞乱目的:

null.toString();

我收到以下编译器错误消息:

Cannot invoke toString() on the primitive type null

这很奇怪,因为 null 既不是原始类型也不是对象引用,如下所述:Is null an Object?

所以,为了确定,我尝试使用 javac 编译这样奇怪的代码行,我得到了这个结果:

NullTest.java:3: <nulltype> cannot be dereferenced

null.toString();
^
1 error

有人知道为什么 Eclipse 会给出这样的(IMO)误导性编译器错误消息吗?

最佳答案

因为 null 类型是 subtype Object,可以想象在 null 上调用 Object 方法是可以的。

但是,按照该逻辑,由于 null 类型是每个引用类型的子类型,我们应该被允许在 null 上调用任何类/接口(interface)的任何方法。那将是一团糟。

语法上,null.toString() 应该是 recognized首先作为方法调用表达式,因为 null 是一个 Primary 表达式。然后,确定要搜索方法 toString 的类/接口(interface),JLS says

...The class or interface to search is T if T is a class or interface type, or the upper bound of T if T is a type variable

It is a compile-time error if T is not a reference type.

T 是这里的空类型;它不是类类型、接口(interface)类型或类型变量,因此这一步应该失败。但是,它会因为T 不是引用类型而失败吗?

空类型是引用类型吗?金力士says

The types ... are divided into two categories: primitive types and reference types

The numeric types are ....

The reference types are class types, interface types, [type variables,] and array types . [period!]

There is also a special null type.

根据您对文本的解析,空类型可能是也可能不是引用类型。这通常并不重要;这只是一个分类问题。但这会导致混淆,例如在这种情况下——失败是因为 T 不是“正确的”引用类型,并且编译器错误地推断它必须是原始类型。

关于java - 为什么 Eclipse 说 null 是原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com