请问下面的执行结果是什么,为什么会是这样的结果,谢谢!
import java.sql.*;class Test {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

public Test() {
}

public void loadConn() {
try
{
if(conn == null) {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","625001993");
}
} catch(Exception e) {
e.printStackTrace();
}
}

public ResultSet query() {
loadConn();
try {
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from admins");
return rs;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
}public class TestObject
{
public static void main(String args[]) {
try {
Test test = new Test();
ResultSet rs = test.query();

if (rs == test.rs) {
System.out.println("equals");
}

test.rs.close();
test.rs = null;

if (rs !=null)
{
System.out.println("rs is not null");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    是这个吧:System.out.println("rs is not null"); if (rs == test.rs) { 
    System.out.println("equals"); 
    }rs为当前的局部变量,而test.rs为Test test = new Test(); 中定义的变量
    其实你没用到Test中定义的ResultSet rs
    class Test { 
    ResultSet rs = null; 
    }
    public class TestObject 中可以改为
    Test test = new Test(); 
    test.rs = test.query(); 
      

  2.   

    System.out.println("rs is not null"); 
      

  3.   

    输出 equals至于为什么 从内存上去理解
      

  4.   

    其实提出这个问题最主要的目的在于提出这样的问题:在很多书上都可以看到这样的的编程方法:在编写连接数据库的通用类时,查询的方法:public ResultSet query() { 
    loadConn(); 
    try { 
    stmt = conn.createStatement(); 
    rs = stmt.executeQuery("select * from admins"); 
    return rs; 
    } catch(Exception e) { 
    e.printStackTrace(); 
    return null; 

    } 在调用的时候ResultSet rs = XX.query(); 
    在对rs.close();rs=null;之后,XX.rs还存在,也就是存在对stmt.executeQuery("select * from admins"); 的引用,所以垃圾回收就不会回收
      

  5.   

    楼主貌似比较认真呵呵,惭愧哦
    不过我以前用JDBC的时候LoadConn和ResultSet都放一块儿,如下
    public class Untitled1 {
      public Untitled1() {
      }
      public static void main(String[] args) {
        try {
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
          Connection conn = DriverManager.getConnection("jdbc:odbc:pubs");
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery(
              "select emp_id,fname+' '+lname as name from employee order by emp_id");
          while (rs.next()) {
            System.out.print(rs.getString(1) 
          }
          rs.close();
          stmt.close();
          conn.close();
          //如果再在这个地方调用就不行了,提示什么什么Closed
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }