private void test() throws SQLException{
ResultSet rs = query();
closeAll(rs);
System.out.println("535........關於java對象傳遞的測試ResultSet:"+rs);
rs.close();
rs = null;
}
private void closeAll(ResultSet rs) throws SQLException {
if (rs != null){
Statement stmt = null;
Connection con = null;
stmt = rs.getStatement();
con = stmt.getConnection();
rs.close();
rs = null;
stmt.close();
stmt = null;
con.close();
con = null;
}
}
列印出的結果:535........關於java對象傳遞的測試ResultSet:org.apache.commons.dbcp.DelegatingResultSet@2fae4a
--------------
我在closeAll方法中已經把rs = null;了,為什麼還能列印出這個對象呢?為什麼不列印出null呢?
在java中傳遞對象的時候,是對引用的值進行複製傳遞;建立了引用的副本。rs=null修改了引用的副本,並沒有修改原來的引用;所以列印出來的還有。
但這兩個引用所指向的都是同一個對象,實際上rs.close() 已經把rs對象關閉掉了。。
http://blog.csdn.net/zhaoqiubo/archive/2004/10/27/zhaoqiubo13.aspx
System.out.println("535........關於java對象傳遞的測試ResultSet:"+rs);
此處列印的rs只是一個控制代碼,而不是rs的實際值,就好像有個地方的地址是"地球路100號",有一天這個地方的建築物被拆了,儘管沒有了建築物,但是這個地方還是叫"地球路100號",但是可以再重新蓋新的樓房一樣
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/zhaoqiubo/archive/2004/10/27/154958.aspx