在此代码段中创建了多少个对象

时间:2019-04-01 13:38:12

标签: java oop methods

将为此代码创建多少个对象?

class Main {
  int num;
  public static void gacemarks(Main m)
  {
    m.num += 10;
  }
  public static void main(String[] args) {
    Main m1 = new Main();
    Main m2 = m1;
    Main m3 = new Main();
    m2.num = 60;
    gacemarks(m2);
    System.out.println(m2);
  }
}

答案是2。 但是我得到了3。 将创建m1,m2引用相同的对象 m3是新创建的,调用后将生成m对象。

3 个答案:

答案 0 :(得分:2)

在您的代码上下文中,我看到显式创建的两个对象是new运算符出现的行:

Main m1 = new Main();
Main m3 = new Main();

以下是每一行中发生的细目分类:

Main m1 = new Main();     // create new Main object 'm1'
Main m2 = m1;             // assign 'm2' to reference 'm1' (no new object)
Main m3 = new Main();     // create new Main object 'm3'
m2.num = 60;              // assign a field in 'm2' (no new object)
gacemarks(m2);            // repeatedly increment the 'm2.num' field (no new object)
System.out.println(m2);   // print 'm2' (no new object)

答案 1 :(得分:2)

  

答案是2

是的。让我们一起算一下:

  

m1将被创建

对,那是你的第一个对象。

  

m2指的是同一对象

再次,没有添加任何新对象;计数仍然是一个。

  

m3是新创建的

那是你的第二名。

  

在调用之后,将生成m对象。

代码中没有m对象:将m2传递给其他方法时,不会创建任何副本。因此,最终计数仍然为两个。

答案 2 :(得分:2)

尽管在代码中直接创建了两个Main对象(使用new运算符),但有人可以说System.out.println(m2);由于{{1 }}被呼叫。