conn.closed()和conn == null的区别
今天,我在连接数据库时遇到了一个问题,所以分享出来.
没错,晴乐诗缘本人第一眼也没看出来是什么问题;
然后,我查阅了一系列的资料最终发现,是因为没有搞清楚conn.closed()和conn == null的区别
这是改过后正确的代码:
首先贴出他们俩的区别
1、conn != null 这个是不确定上面的connection是否被初始化而判断的,因为很多时候写代码,使用懒加载模式,一般是先定义一个Connection conn=null,使用的时候才去初始化它的对象,这样可以减少内存的浪费。这个时候如果不确定conn是否被初始化的时候,最好在关闭前加上conn != null判断,不然直接关闭conn有可能报空指针错误。
2、conn.isClosed() 这个是判断当前连接是否被关闭,这个首先要保证Connection已经生成实例了。如果没有生成实例,就会报错,
那么我们的为什么要切换他们的顺序呢?
这里就涉及到 || 运算符的概念;(或运算):
|| 运算符的规则是,当第一个为true时,后面的条件不会判断,直接进入if,而当第一个条件为false时,才会判断第二个条件
第一个条件 | 第二个条件 | 结果 |
---|---|---|
true | true(不判断) | true |
true | false(不判断) | true |
false | true | true |
false | false | false |
这是,因为我们在之前的代码中声明了Connection conn = null;
而并没有生成conn 的实例
所以当conn.closed在前面时,就会报出java.lang.NullPointerException的错误;
调换位置后,首先判断了conn == null,当他满足后,并不会判断后一个条件,所以,这样对程序进行了优化;