3

以下代码片段似乎完全符合我的要求:

public CharSequence[] getAllCities() {
  String selectQuery = "select " + COLUMN_CITY + " from " + TABLE_NAME;

  SQLiteDatabase db = this.getReadableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);

  CharSequence[] cities = new CharSequence[cursor.getCount()];

  if (cursor.moveToFirst()) {
    int numColumns = cursor.getColumnCount();
    int i=0;
    do {        
      cities[i++] = cursor.getString(0);
    } while (cursor.moveToNext());
  }

  cursor.close();
  db.close();
  return cities;
}

也就是说,调用者得到返回的有效值:

CharSequence[] wowthiswillneverworkincpp = database.getAllCities();

但是......当垃圾收集器启动时,这不是会在某个意想不到的时刻咬我吗?

如果不是,Java 语言中的什么特性可以保证这个本地实例化的数组在整个使用过程中保持有效?我是否正确地假设只要它被分配到某个地方(即“引用”),它就不会被 GC 擦干净?

4

1 回答 1

5

对象是在本地还是在任何其他地方实例化都没有关系。如果某个东西有对它的引用,无论是本地的(cities),还是从方法的返回中分配的(wowthiswillneverworkincpp),那么垃圾收集器不会把它擦干净。

于 2013-05-21T23:07:12.223 回答