无法弄清楚为什么ArrayList.add()不适合我

时间:2013-11-28 21:28:53

标签: java arraylist

public void findWord(String word) {
  wordsOnBoard = new ArrayList<String>();
  if (dictionary.contains(word)) {
    System.out.println(word);
    wordsOnBoard.add(word); 
  } else {
    System.out.println("None found");
  }
  System.out.println(wordsOnBoard);
}

wordsOnBoard是一个全局ArrayList

当dictionary.contains(word)打印出单词,然后将其添加到wordsOnBoard,但是当它离开if循环时,单词不再出现在ArrayList wordsOnBoard中。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

每次输入方法时,您都会创建一个新的ArrayList

然后你向它添加一些东西(有时候),一旦你离开这个方法,该对象就有资格获得GC。

如果你想保留它,你应该把ArrayList放到班级的一个字段中。

答案 1 :(得分:0)

你没有归还List,我建议你试试

// pass in your List reference, and then it won't go out of scope.
public void findWord(List<String> wordsOnBoard, String word) {
  if (dictionary.contains(word)) {
    System.out.println(word);
    wordsOnBoard.add(word); 
  } else {
    System.out.println("None found");
  }
  System.out.println(wordsOnBoard);
}

或者,您可以在班级中wordsOnBoard成为一个字段。

答案 2 :(得分:0)

删除此行:   wordsOnBoard = new ArrayList();

从函数

并将其放在实际定义全局变量的位置。

当你的函数进入范围时,这个wordsOnBoard将获得一个本地ArrayList,其生命周期仅限于函数本身的生命周期。一旦函数退出,垃圾收集将销毁该对象。