说,我正在使用连接到名为con
的数据库(或套接字或其他任何Closable
)。 close()
之后会发生什么? con
是否等于null
或者还有什么内容? con.close()
和con = null
之间有什么区别?
答案 0 :(得分:5)
当您调用close
时,该对象应释放它在幕后使用的所有资源。如果是java.sql.Connection
的实例,它将是以下两种情况之一:
DriverManager.getConnection(...)
。Connection
由数据库连接池处理的DataSource
处理时,会发生这种情况。设置对象con = null
只是为变量赋值null
,引用仍然有效,直到垃圾收集器决定将其删除。尽管如此,将Connection
设置为null
并不会调用close
方法,因此您可能会发生内存泄漏。
作为最佳做法,您应始终在close
的实例上调用Closeable
方法或使用try-with-resources
(自Java 7以来可用)以确保资源总是关闭的。