考虑一个名为Calculator
的类,其代码如下:
class Calc extends Calculator {
Calculator calculator; // [Style 1]
Calculator calculator = new Calculator(); // [Style 2]
}
据我所知,[1]
中没有分配任何内存,但在语句[2]
中创建了一个新的Calculator
对象。
除此之外是否还有其他差异?
答案 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类的非默认构造函数(例如,有一些副作用,例如日志记录),则在第一种情况下不会调用它。