对象引用声明和对象构造之间的区别?

时间:2011-08-18 11:34:17

标签: java

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

class Calc extends Calculator {

    Calculator calculator;                    // [Style 1]

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

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

除此之外是否还有其他差异?

4 个答案:

答案 0 :(得分:6)

写作时

Calculator calculator;

这只表示您声明对Calculator类型对象的引用。引用不是对象,因此不分配内存。

写作时

new Calculator();

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

所以,当你写

Calculator calculator = new Calculator();

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

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

<强>更新: 关于本主题的标题,创建类的实例创建对象是完全相同的。我的意思是,我相信,声明对象的引用 vs 使用inplace assignment声明它(虽然我不完全确定术语): - )

答案 1 :(得分:3)

Calculator calculator; - 它是变量计算器的定义..你告诉编译器它可以保存计算器类型的变量而不是其他任何东西。它现在为空,没有分配任何内容..

Calculator calculator = new Calculator();--这实际上将在堆中创建的对Calculatore对象的引用存储到计算器变量。现在它存储了一个名为初始化的变量。

答案 2 :(得分:2)

在第一种情况下,没有创建对象计算器,并且变量的值为 null

答案 3 :(得分:0)

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