初始化一个对象为null或它的默认构造函数之间的区别

时间:2015-04-19 10:38:57

标签: java constructor null

假设我们有一个类,只包含一个实例变量其类型是引用类型

我们没有实现任何构造函数,因此该类具有其默认构造函数

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

如果是,

我们想要创建这个类的对象

这两个语句之间是否有任何区别,用于声明和初始化该类的对象???

Class object = null;

Class object = new Class();

1 个答案:

答案 0 :(得分:4)

  

这两个语句之间是否有任何区别,用于声明和初始化此类的对象???

Class object = null;
     

Class object = new Class();

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

第二个初始化类的实例,因此初始化它具有的任何实例字段。如果这些字段中的任何一个是引用,并且您尚未实现构造函数,则它们将初始化为null

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

class Foo {
    String str;
}

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

您的第一个声明(更改Class => Fooobject => f以避免混淆):

Foo f = null;

...在内存中产生这个结果:

+----------------+
| f (a variable) |
+----------------+
| null           |
+----------------+

你的第二个陈述:

Foo f = new Foo();

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

+----------------+
| f (a variable) |
+----------------+     +--------------+
| (ref #412785)  |---->| Foo instance |
+----------------+     +--------------+
                       | str: null    |
                       +--------------+