通过引用复制的对象并替换ArrayList中的所有项

时间:2014-03-19 22:24:47

标签: java arraylist

我知道人们之前已经遇到过这个问题而且我已经完成了之前的帖子。 我有一个arrayList,我试图添加对象。在每次添加调用期间,都会复制相同的对象引用。虽然我使用了新的'运算符和我正在创建新对象。这是基本的,并且在我在每次迭代期间再次创建对象时已经起作用。 任何帮助深表感谢。 这是我的代码。

public List<Actor> readAllActors()
{
    String selectMovie = "SELECT * from ACTOR;";
    List<Actor> listOfActors = new ArrayList<Actor>();
    try {           
        statement = conn.prepareStatement(selectMovie);
        results = statement.executeQuery(selectMovie);      
                    Actor a = new Actor();
        while (results.next())
        {                  
                       a = getActorFromResult(results);
                       listOfActors.add(new Actor(a.getId(), a.getFirstName(), a.getLastName(), a.getDateOfBirth()));                               
        }

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    return listOfActors;    
}

private Actor getActorFromResult(ResultSet results) throws SQLException {
    // TODO Auto-generated method stub

    int id = results.getInt("id");
    String fname = results.getString("firstName");
    String lname = results.getString("lastName");
    String dob = results.getString("dateOfBirth");

    Actor actor = new Actor(id, fname, lname, dob );        
    return actor;
}

我尝试在每次迭代中打印对象。它从表中获取正确的行..新的Actor()似乎对创建新的对象引用没有任何影响!!

2 个答案:

答案 0 :(得分:1)

您的代码很好,无法始终传递相同的参考。您可以通过==检查列出的对象来检查它。

您可以将代码重构为

results = statement.executeQuery(selectMovie);      
while (results.next())
{          
    listOfActors.add(getActorFromResult(results));                    
}

因为您在获取结果集后创建了新的Actor,因此创建了一个具有自己引用的新对象。这也将使代码更加清晰。

同样return new Actor(id, fname, lname, dob );将在您的结果方法中完成工作。您无论如何都不使用自我描述性的局部变量。

我怀疑您的问题出在您的数据库中。尝试使用数据库工具查询它。

答案 1 :(得分:0)

尝试更改该行

listOfActors.add(new Actor(a.getId(), a.getFirstName(), a.getLastName(), a.getDateOfBirth()));

到那个

listOfActors.add(getActorFromResult(results));

并删除行

a = getActorFromResult(results);

您的引用肯定不一样,请在调试器中查看。