为什么/如何返回"本地实例化的数组"在Java中工作?

uTu*_*Fan 3 java garbage-collection return

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

CharSequence[] wowthiswillneverworkincpp = database.getAllCities();
Run Code Online (Sandbox Code Playgroud)

但是......当垃圾收集器开始出现时,是不是会在一些意想不到的时刻咬我?

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

rge*_*man 5

如果对象在本地或在任何其他位置实例化并不重要.如果有东西引用它,无论是local(cities),还是从方法(wowthiswillneverworkincpp)的返回分配,那么垃圾收集器就不会擦除它.

  • @uTubeFan此外,Java不是C/C++:没有"本地实例化",每个对象都在堆上实现了新的. (2认同)