stmt.close();后用stmt = null;有什么意义吗?

解决方案 »

  1.   

    希望大家发表意见!是不是用了stmt=null这个语句后,stmt的内存垃圾就永远不能回收了?
      

  2.   

    stmt=null和stmt.close()是两回事,前者是将对象的指针赋于了null,而后者是将对象关闭,但它还是存在。并且在程序里建议还是显示的用close方法更好控制一些!
      

  3.   

    谢谢楼上的,我是想知道在stmt.close();后还有必要用stmt=null;吗?或是说用了stmt=null;有什么好处和坏处?
      

  4.   

    stmt.close 之后可能就变成 null了null了 垃圾回收 就知道不可能再用了 如果需要会回收内存 不过 资源还是要 close 关闭的我是这样想的。。
      

  5.   

    stmt.close(); 释放资源啊!
    stmt = null; 
       表示 stmt 已经是一个空对象,当垃圾回收器发现时可以回收 stmt 占用的资源啊!
    一起用绝对不会出错的!
      

  6.   

    用了close后没有必要用null了,因close已经将资源释放了,只对象没有回收而已,需要垃圾回收来做。
    用stmt==null作用不是很明显,对于PrepareStatement来说这个并没有作用,对Statement会有作用!
      

  7.   

    up,stmt==null没有价值
    {
      Statement stmt = .....
      stmt.close();
    }//这个打括号结束是就表示,stmt可以回收了
     但stmt.close()还是有必要的,它要释放某些资源
      

  8.   

    close就可以了,没有必要=null
      

  9.   

    疑问:
    对于 moumouren(某某人) 中说的}//这个打括号结束是就表示,stmt可以回收了
    不是很认可。垃圾收集器只是在它说占有的空间满或者到一定的周期时才会进行一次回收的。
      

  10.   

    何必那么麻烦呢,我一般这样处理
    public static void closeDB(Connection conn, Statement stmt, ResultSet rs) throws
          SQLException {
        try {
          if (rs != null)
            rs.close();
          if (stmt != null)
            stmt.close();
          if (conn != null)
            conn.close();
        }
        catch (SQLException e) {
              }
      }
      

  11.   

    stmt =null //将句柄指向null,原先stmt所指对象于句柄失去关联,等待垃圾机处理
    stmt.close()//意思也是释放资源 stmt = null 这个类似功能在函数close()里被执行,close()是一个继承来的函数,隐式的执行了stmt = null.
    所以用其一不用其二 随君选择
      

  12.   

    stmt=null,因该没有用,sun的例子上没有用的。
      

  13.   

    我不认同上面几位的观点!
    stmt.close () 会让 stmt=null吗?
    答案is no!
    大家随便编个程序,跟踪跟踪 stmt .close 后 stmt 是否会被设为 null,就知道了!
    答案是肯定不会被设为 null的!
    而且,我认为只调用 stmt.close(),stmt所占用的资源不会被垃圾回收器收集的!
    大家编个程序跟踪一下就知道了!
    至于  stmt=nulll 和 stmt.close 可以随便使用其中之一,那我是绝对不同意的!
    肯定 的 stmt.close 是应该调用的!