为什么我们在java中使用对象的引用?
Snippet one:
Computer comp = new Computer();
Snippet two:
Computer comp;
comp = new Computer();
为什么我们使用引用,如果我们可以使一个像在片段中显示的对象相同并做同样的事情?
答案 0 :(得分:3)
两个片段的结果是相同的。
我们有两个操作:声明和初始化。
在代码段中,两个操作应用于一个语句中:
Computer comp = new Computer();
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
declaration initialization
这意味着您将在堆栈上有一个名为comp
的变量,它将指向堆new Computer()
中的值。
Snippet 2做同样的事情,但操作是分开的:
Computer comp; <-- declaration
comp = new Computer(); <-- initialization
答案 1 :(得分:0)
您可能根本不知道在Computer comp
宣布时分配什么。
答案 2 :(得分:0)
在这两种方法中,都有一个引用变量和一个对象。
Computer comp = new Computer();
此处,comp
是引用变量,new Computer()
是创建的对象。然后将此对象分配给引用变量comp
。
Computer comp;
comp = new Computer();
此处,comp
是引用变量,new Computer()
是创建的对象。然后将此对象分配给引用变量comp
。
答案 3 :(得分:0)
在第一个片段中,您声明一个引用变量并在同一语句中初始化它。 在第二个片段中,您将分割声明和初始化。
有时分割它们是有意义的,因为变量引用的实例可能会以不同的方式初始化(使用不同的构造函数或构造函数参数),具体取决于某些条件。
如果引用变量是某个块的本地变量,则必须在首次访问它之前给它一些初始值(null
或实际的实例引用),否则代码不会编译。
答案 4 :(得分:0)
如果我没记错的话,在加载课程时会有很大的不同。
示例1:
class MyObj {
private ComplexClass cc = new ComplexClass();
}
示例2:
class MyObj {
private ComplexClass cc;
MyObj() {
cc = new ComplexClass();
}
}
在示例1&#39; cc&#39;将被初始化,如果&#39; MyObj&#39;正在由类加载器加载。
在示例2&#39; cc&#39;将被初始化,如果&#39; MyObj&#39;将被初始化。
对于具有许多复杂属性的类,它在Java堆的使用方面有所不同。
如果我错了,请纠正我!