gpt4 book ai didi

java - ArrayList 值被覆盖?

转载 作者:行者123 更新时间:2023-12-02 11:30:23 24 4
gpt4 key购买 nike

我每次读取新行时都使用数组字符串列表从数据库中读取值,它会覆盖旧行,为什么会发生这种情况?这是我的代码。

List<String[]> table = new ArrayList<>();
Statement statement = dbConnection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
int columnCount = resultSet.getMetaData().getColumnCount();
String[] row = new String[columnCount];
while(resultSet.next()) {
for(int i = 0; i < columnCount; ++i) {
row[i] = resultSet.getString(i + 1);
}
table.add(row);
}

预期返回结果为

+-------------+-------------+-------------+
| row 1 col 1 | row 1 col 2 | row 1 col 3 |
+-------------+-------------+-------------+
| row 2 col 1 | row 2 col 2 | row 2 col 3 |
+-------------+-------------+-------------+

当我得到这个结果时

+-------------+-------------+-------------+
| row 2 col 1 | row 2 col 2 | row 2 col 3 |
+-------------+-------------+-------------+
| row 2 col 1 | row 2 col 2 | row 2 col 3 |
+-------------+-------------+-------------+

但如果我使用此代码块,问题就会得到解决,并且数据将按预期返回。

List<String[]> table = new ArrayList<>();
Statement statement = dbConnection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
int columnCount = resultSet.getMetaData().getColumnCount();
while(resultSet.next()) {
String[] row = new String[columnCount];
for(int i = 0; i < columnCount; ++i) {
row[i] = resultSet.getString(i + 1);
}
table.add(row);
}

最佳答案

在第一个示例代码片段中,您将构造单个 String 数组,并在 while 循环的每次迭代中将相同引用连续添加到累加器列表中。

因此,您将相同的字符串数组引用添加到累加器列表columnCount次,并且它们都引用内存中的同一对象。这就是您收到意外结果的原因。

另一方面,第二个示例代码片段在 while 循环的每次迭代中构造一个新的不同字符串数组,从而收到预期的结果。

关于java - ArrayList 值被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49334854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com