【问题标题】:Difference between object reference declaration and object construction?对象引用声明和对象构造之间的区别?
【发布时间】:2011-08-18 11:34:16
【问题描述】:

考虑一个名为Calculator 的类,其代码如下:

class Calc extends Calculator {

    Calculator calculator;                    // [Style 1]

    Calculator calculator = new Calculator(); // [Style 2]
}

据我所知,[1] 中没有分配内存,但在语句 [2] 中创建了一个新的 Calculator 对象。

除此之外还有其他区别吗?

【问题讨论】:

    标签: java


    【解决方案1】:

    当你写作时

    Calculator calculator;
    

    这仅意味着您声明了对Calculator 类型对象的引用。引用不是对象,所以没有分配内存。

    当你写作时

    new Calculator();
    

    它构造Calculator类型的对象并返回对该对象的引用。

    所以,当你写作时

    Calculator calculator = new Calculator();
    

    这意味着您构造对象并将对它的引用存储在calculator中。

    'calculator' 不是一个对象,它只是对这个对象的一个​​引用。您可以对同一个对象有多个引用。

    更新: 关于这个题目的题目,创建类的实例和创建对象是完全一样的。你的意思是,我相信,声明对对象的引用 vs 用就地赋值声明它(虽然我不太确定术语):-)

    【讨论】:

      【解决方案2】:

      Calculator calculator;- 它是变量 calculator 的定义。你告诉编译器它可以保存 Calculator 类型的变量,仅此而已。现在它有 null 并且没有分配任何内容..

      Calculator calculator = new Calculator();--this 实际上将对在堆中创建的Calculatore 对象 的引用存储到calculator 变量中。现在它存储了一个名为 initialisation.

      的变量

      【讨论】:

        【解决方案3】:

        第一种情况,没有创建对象Calculator,变量的值为null。

        【讨论】:

          【解决方案4】:

          第一个引用的值为空,第二个指向对象。此外,如果您有 Calculator 类的非默认构造函数(具有一些副作用,例如日志记录),则不会在第一种情况下调用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-26
            • 2012-01-12
            • 1970-01-01
            相关资源
            最近更新 更多