创建实例并将其作为参数传递和在参数内创建实例有什么区别?
What is the difference between creation of instance and passing it as parameters and creation instance inside parameters?
下一条记录之间的主要区别是什么:
Database database = new Database(config);
User user = new User(database);
和
User user = new User(new Database(config));
我的理解是否正确,第二个只是第一个的缩写形式,可以在我不打算调用任何 database
方法时使用?
对于大多数用途来说,确实没有太大区别。不过有几点不同:
在第一种情况下,您可以通过 database
变量访问 Database
实例,而在第二种情况下,您必须从 User
user
引用的实例,以便直接对其执行任何操作。如果您只是用 Database
构造 User
然后直接不对其进行任何操作,那显然无关紧要。
如果 user
引用的 User
实例由于某种原因不再引用 Database
对象(例如,它只在其构造函数中使用它,或者其他一些调用将引用它的成员变量设置为 null
),并且 database
仍然存在,那么对该 Database
对象的引用仍然存在于程序中, GC 无法收集它。如果您正在为每个对象创建单独的成员变量而不是使用局部变量,或者如果您单独传递对象,并且您不打算访问 Database
,那么这主要是一个问题直接,那么为它设置一个单独的成员变量或传递它真的没有意义。
所以,实际上,唯一的区别与单独引用 Database
的后果有关,如果您对 Database
所做的一切都是构建 User
,那么拥有一个 database
变量是完全没有必要的。
下一条记录之间的主要区别是什么:
Database database = new Database(config);
User user = new User(database);
和
User user = new User(new Database(config));
我的理解是否正确,第二个只是第一个的缩写形式,可以在我不打算调用任何 database
方法时使用?
对于大多数用途来说,确实没有太大区别。不过有几点不同:
在第一种情况下,您可以通过
database
变量访问Database
实例,而在第二种情况下,您必须从User
user
引用的实例,以便直接对其执行任何操作。如果您只是用Database
构造User
然后直接不对其进行任何操作,那显然无关紧要。如果
user
引用的User
实例由于某种原因不再引用Database
对象(例如,它只在其构造函数中使用它,或者其他一些调用将引用它的成员变量设置为null
),并且database
仍然存在,那么对该Database
对象的引用仍然存在于程序中, GC 无法收集它。如果您正在为每个对象创建单独的成员变量而不是使用局部变量,或者如果您单独传递对象,并且您不打算访问Database
,那么这主要是一个问题直接,那么为它设置一个单独的成员变量或传递它真的没有意义。
所以,实际上,唯一的区别与单独引用 Database
的后果有关,如果您对 Database
所做的一切都是构建 User
,那么拥有一个 database
变量是完全没有必要的。