【问题标题】:What is the use of references of objects in Java?Java中对象的引用有什么用?
【发布时间】:2014-11-23 11:08:31
【问题描述】:

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

片段一:

Computer comp  = new Computer();

片段二:

Computer comp;
comp = new Computer();

如果我们可以使像 sn-p 中所示的对象都相同并且做同样的事情,为什么还要使用引用?

【问题讨论】:

  • 您是否有意使用不同的类型 - Computercomputer
  • References in Java 的可能重复项

标签: java object reference


【解决方案1】:

两个 sn-ps 的结果是一样的。

我们有两个操作:声明初始化

在 sn-p 1 中,两个操作应用在一个语句中:

Computer comp     =    new Computer();
^^^^^^^^^^^^^          ^^^^^^^^^^^^^^
 declaration           initialization

这意味着您将在堆栈上有一个变量,称为comp,它将指向堆中的一个值new Computer()

片段二做同样的事情,但操作是分开的:

Computer comp;   <-- declaration
comp = new Computer();  <-- initialization

【讨论】:

  • 将声明和初始化分成两部分的原因是什么,如果我们可以在一个语句中做到这一点并且两者都具有相同的意义。
  • @Yogesh,因为有时,例如,我们想在块之外定义一个变量(循环、方法等),以便在块完成后使用它。
  • 例如我们声明了一个实例变量,并在一个方法中对其进行了初始化,那么只有调用该方法时该变量才会被初始化
  • class os{ computer comp;无效窗口 { comp = 新电脑; } 无效 mac{ comp = 新的 macbook; } } 如果我们调用windows方法那么对象就是pc,如果调用mac方法那么对象就是macbook。是不是一个正确的例子
【解决方案2】:

您可能根本不知道在Computer comp 声明时分配什么。

【讨论】:

    【解决方案3】:

    在这两种方法中,都有一个引用变量和一个对象。

    Computer comp = new Computer();
    

    这里,comp 是引用变量,new Computer() 是创建的对象。然后将此对象分配给引用变量comp

    Computer comp;
    comp = new Computer();
    

    这里,comp 也是引用变量,new Computer() 是创建的对象。然后将此对象分配给引用变量comp

    【讨论】:

      【解决方案4】:

      在第一个 sn-p 中,您声明一个引用变量并在同一语句中对其进行初始化。 在第二个 sn-p 中,您将声明和初始化分开。

      有时拆分它们是有意义的,因为变量引用的实例可能会根据某些条件以不同的方式初始化(​​使用不同的构造函数或构造函数参数)。

      如果引用变量是某个块的本地变量,您必须在第一次访问它之前给它一些初始值(null 或实际的实例引用),否则代码将无法编译。

      【讨论】:

        【解决方案5】:

        如果我没记错的话,作为类加载时会有很大的不同。

        示例 1:

        class MyObj {
           private ComplexClass cc = new ComplexClass();
        }
        

        示例 2:

        class MyObj {
           private ComplexClass cc;
        
           MyObj() {
              cc = new ComplexClass();
           }
        }
        

        在示例 1 中,如果类加载器正在加载“MyObj”,则“cc”将被初始化。

        在示例 2 中,'cc' 将被初始化,如果 'MyObj' 将被初始化。

        对于具有许多复杂属性的类,它在 Java 堆的使用方面有所不同。

        如果我错了,请纠正我!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-20
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          • 2013-02-05
          • 2014-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多