Java - null是否是对象的一个实例?

37

我看到过null不是任何实例的instanceof,但是另一方面,在Java中所有类都继承自Object类。


4
基本类型(如 intbool 等)不是 Object 的子类型。 - Donal Fellows
可能是重复的 https://dev59.com/K3RB5IYBdhLWcg3wxZ7Y - Peter Lawrey
7个回答

60

不是,它是一个引用。null不是一个对象。

String s = null;

System.out.println(s instanceof Object); // false

@ChristianSchnorr String s = ""; 引用了一个内部内容为空的 String 对象(一个 char 数组)。另一方面,String s = null 没有引用任何东西。 - Hudson Pena Magalhães
@HudsonPenaMagalhães 那又怎样?它可能没有引用任何“真实”的东西,而是指向了空无一物,但它仍然是一个引用。 - Christian Schnorr

11

1
感谢您提供这个我之前不知道的优秀参考资料。 - JDelage
我刚才快速查看了一下,实际上有一个锚点可以直接跳转到IAQ中相关的答案,所以我已经更新了你的链接。 - mikej

5

还有一种特殊的空类型,即表达式 null 的类型,它没有名称。由于 null 类型没有名称,因此无法声明 null 类型的变量或将其强制转换为 null 类型。null 引用是 null 类型表达式的唯一可能值。null 引用始终可以转换为任何引用类型。在实践中,程序员可以忽略 null 类型,只需假装 null 只是一个可以是任何引用类型的特殊字面量。

Java 语言规范


3

Null表示您没有对对象的引用。

Object o = null;

o是一个引用,但是没有对象被引用,也没有为它分配内存。

o = new Object();

o仍然是一个引用,它保存了对象在内存中的地址


2
不,null不是一个对象。它是一个字面量,意味着变量没有引用任何对象。

1
根据JLS所述,null是空类型,并不属于引用类型。但在期望引用类型值的情况下,它可以使用(该值实际上是类型代数中的“底部”)。

0
希望这个例子能够解决你的疑惑:
public void printObject(Object object) {
    System.out.println("object referred");
}

public void printObject(double[] doubleArray) {
    System.out.println("Array of type double");
}

public static void main(String[] args) {
    JavaNullObjectTest javaNullObjectTest = new JavaNullObjectTest();

    javaNullObjectTest.printObject(null); //Array of type double

    javaNullObjectTest.printObject((Object)null); //object referred
}

我们可以将'null'转换为对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接