【问题标题】:the difference between initialize an object with null or it's default constructor用 null 初始化对象或它的默认构造函数之间的区别
【发布时间】:2015-04-19 10:38:56
【问题描述】:

假设我们有一个类,它只包含一个实例变量并且它的类型是引用类型。我们没有实现任何构造函数,所以 Class 有它的默认构造函数。

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

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

Class object = null;

Class object = new Class();

【问题讨论】:

    标签: java constructor null


    【解决方案1】:

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

    Class object = null;
    

    Class object = new Class();
    

    第一个初始化该类的对象,它只是声明一个变量并将null 分配给它。没有实例,所以没有实例字段。

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

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

    class Foo {
        String str;
    }
    

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

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

    Foo f = null;
    

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

    +----------------+ | f (一个变量) | +----------------+ |空 | +----------------+

    你的第二个陈述:

    Foo f = new Foo();
    

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

    +----------------+ | f (一个变量) | +----------------+ +--------------+ | (参考号 #412785) |---->| Foo 实例 | +----------------+ +--------------+ |字符串:空 | +---------------+

    【讨论】:

    • @T.J Crowder : tnx 为您提供完整的答案
    猜你喜欢
    • 2012-01-02
    • 2011-06-12
    • 1970-01-01
    • 2017-02-07
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多