以下代码片段似乎完全符合我的要求:
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 擦干净?