全局变量的大小与返回列表的大小不同

时间:2017-05-17 15:08:51

标签: java list

我有一个变量<View> <Image source={require('./images/test.jpg')} /> <View> ,它是全局定义的,并在构造函数中初始化为public static List<Integer> allBooksIDs

问题在于,当我检查列表allBooksIDs = dbFunctions.getAllBookIDs();的大小时,值为28,但是当我检查allBooks方法返回的列表的大小时 - 它的57.有什么我做错了吗?

getAllBookIDs()

dbFunctions.getAllBookIDs()

更新

所以,问题解决了,但我不明白为什么变量正在更新。我有一个将全局变量的值赋给另一个变量public List<Integer> getAllBookIDs(){ List<Book> allBooks = getAllBooks(); List<Integer> res = new ArrayList<>(); for (Book b : allBooks){ res.add(b.getId()); } return res; } private List<Book> getAllBooks() { Query query = manager.createQuery("from books"); return query.getResultList(); } 的方法,之后变量正在更新。我只是找到了:

List<Integer> nonRatedBooks = allBooksIDs

任何人都可以解释,为什么会这样?所以我将来也不会做同样的失败。

2 个答案:

答案 0 :(得分:4)

getAllBookIDs()中有一个名为allBooks的变量,因此此方法返回的List将是内部定义的allBooks,而不是全局定义的allBooks 1}}对象。

答案 1 :(得分:0)

它是掩码和初始化变量allBooks的组合。第一步是使用

在构造函数中初始化allBooks
constructor{
  allBooks = dbFunctions.getAllBookIDs(); // returns a list
}

此时它的大小正确,但稍后如果添加更多Book,则不再更新静态allBooks字段,这是因为屏蔽{{1}内的变量名称1}}方法。

getAllBookIDs