Java中对象引用的用途是什么?

时间:2014-11-23 11:08:32

标签: java object reference

为什么我们在java中使用对象的引用?

Snippet one:

Computer comp  = new Computer();

Snippet two:

Computer comp;
comp = new Computer();

为什么我们使用引用,如果我们可以使一个像在片段中显示的对象相同并做同样的事情?

5 个答案:

答案 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堆的使用方面有所不同。

如果我错了,请纠正我!