创建实例并将其作为参数和创建实例传递给参数之间有什么区别?

时间:2017-02-13 07:51:22

标签: oop d

记录旁边的主要区别是什么:

Database database = new Database(config);
User user = new User(database);

User user = new User(new Database(config));

我是否正确理解第二个只是第一个的缩写,可以在我不打算调用任何database方法时使用?

1 个答案:

答案 0 :(得分:2)

在大多数情况下,确实没有多大区别。但是有一些不同之处:

  1. 在第一种情况下,您可以通过Database变量访问该database实例,而在第二种情况下,您必须从User实例获取该实例user引用,以便直接对其执行任何操作。如果您只是使用User构建Database然后直接对其执行任何操作,那显然无关紧要。

  2. 如果User引用的user实例由于某种原因不再引用Database对象(例如,它仅在其构造函数中使用它,或其他一些调用使它将引用它的成员变量设置为null),并且database仍然存在,然后程序中仍然存在对该Database对象的引用,并且GC可以& #39;收集它。如果您正在为每个对象创建单独的成员变量而不是使用局部变量或者如果您单独传递对象,并且如果您不是这样做,那么这主要是一个问题要直接访问Database,那么为它设置单独的成员变量或传递它是没有意义的。

  3. 所以,实际上,唯一的区别与单独引用Database的后果有关,如果您对Database所做的一切正构建User 1}},然后拥有database变量是完全没必要的。