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