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

Java 对象引用声明和对象构造之间的区别?,java,Java,考虑一个名为Calculator的类,其代码如下: class Calc extends Calculator { Calculator calculator; // [Style 1] Calculator calculator = new Calculator(); // [Style 2] } 据我所知,在[1]中没有分配内存,但在语句[2]中创建了一个新的计算器对象 除此之外还有其他区别吗?在第一种情况下,没有创建对象计算器,变

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

class Calc extends Calculator {

    Calculator calculator;                    // [Style 1]

    Calculator calculator = new Calculator(); // [Style 2]
}
据我所知,在
[1]
中没有分配内存,但在语句
[2]
中创建了一个新的
计算器
对象


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

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

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

当您编写

Calculator calculator;
new Calculator();
Calculator calculator = new Calculator();
这只意味着您正在声明对类型为
Calculator
的对象的引用。引用不是对象,因此未分配内存

当你写作时

Calculator calculator;
new Calculator();
Calculator calculator = new Calculator();
它构造类型为
Calculator
的对象,并返回对此对象的引用

所以,当你写作的时候

Calculator calculator;
new Calculator();
Calculator calculator = new Calculator();
这意味着您要构造对象并在
计算器中存储对它的引用

“计算器”不是对象,它只是对该对象的引用。同一对象可以有多个引用

更新
关于本主题的标题,创建类的实例和创建对象是完全相同的。我相信,你的意思是,声明对对象的引用,而不是用就地赋值声明它(尽管我不完全确定术语):-)

计算器-它是变量计算器的定义。。您告诉编译器它可以保存类型为Calculator的变量,而不保存其他变量。它现在为null,并且没有赋值


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