假设我们有一个类,只包含一个实例变量而其类型是引用类型
我们没有实现任何构造函数,因此该类具有其默认构造函数
如果我正确理解默认构造函数为实例变量提供默认值,并且引用类型的默认值为null。是真的???
如果是,
我们想要创建这个类的对象
这两个语句之间是否有任何区别,用于声明和初始化该类的对象???
Class object = null;
和
Class object = new Class();
答案 0 :(得分:4)
这两个语句之间是否有任何区别,用于声明和初始化此类的对象???
Class object = null;
和
Class object = new Class();
第一个不初始化类的对象,它只是声明一个变量并为其分配null
。没有实例,因此没有实例字段。
第二个初始化类的实例,因此初始化它具有的任何实例字段。如果这些字段中的任何一个是引用,并且您尚未实现构造函数,则它们将初始化为null
。
让我们用一个具体的例子:
class Foo {
String str;
}
由于str
是引用,如果我们创建Foo
的实例,str
将初始化为null
。
您的第一个声明(更改Class
=> Foo
和object
=> f
以避免混淆):
Foo f = null;
...在内存中产生这个结果:
+----------------+ | f (a variable) | +----------------+ | null | +----------------+
你的第二个陈述:
Foo f = new Foo();
......给了我们一些非常不同的东西:
+----------------+ | f (a variable) | +----------------+ +--------------+ | (ref #412785) |---->| Foo instance | +----------------+ +--------------+ | str: null | +--------------+