使用 null 初始化对象与其默认构造函数之间的区别



让我们假设我们有一个类,它只包含一个实例变量它的类型是引用类型。我们没有实现任何构造函数,因此该类有其默认构造函数。

如果我理解正确的话,默认构造函数为实例变量提供默认值,而引用类型的默认值为null。这是真的吗?

如果是,我们希望创建一个此类的对象。这两个声明和初始化此类对象的语句之间有什么区别吗?

Class object = null;

Class object = new Class();

这两个声明和初始化此类对象的语句之间有什么区别吗???

Class object = null;

Class object = new Class();

第一个不初始化类的对象,它只是声明一个变量并为其分配null。没有实例,因此也没有实例字段。

第二个初始化类的实例,从而初始化它所具有的任何实例字段。如果这些字段中的任何一个是引用,并且您还没有实现构造函数,那么它们将被初始化为null

让我们举一个具体的例子:

class Foo {
String str;
}

由于str是一个引用,如果我们创建Foo的实例,则str将初始化为null

您的第一条语句(更改Class=>Fooobject=>f以避免混淆):

Foo f = null;

结果在内存中:

+----------------+|f(变量)|+----------------+|null|+----------------+

您的第二条声明:

Foo f = new Foo();

给了我们一些非常不同的东西:

+----------------+|f(变量)|+----------------++--------------+|(参考号412785)|---->|Foo实例|+----------------++--------------+|str:null|+--------------+

最新更新