Для меня это звучит как преждевременная оптимизация, если
- Вы работаете с мобильным устройством с ограничением ресурсов или
- Количество элементов (путей к файлам) в массиве может быть очень большим.
Сказав это, массив объектов String превосходит массив объектов File с точки зрения памяти и скорости. И для этого есть несколько причин:
Объект File имеет ряд личных атрибутов, включая, но не ограничиваясь,
Создание экземпляра объекта File опирается на статическую ссылку на конкретную реализацию java.io.FileSystem, к которой конструктор (-ы) File обращаются к нему
- Как минимум, для создания объекта File требуется вызов FileSystem.normalize () и FileSystem.prefixLength () (в дополнение к созданию собственных закрытых ссылок на путь и длину префикса.
Итак, стоимость создания массива n Экземпляров файла равна
n * (expense_of_constructor + avg_construction_of_individual_path_strings_off_filesystem)
expense_of_constructor = init_of_local_vars + expense_of_path_normalization + expense_of_prefix_length_computation
С массивом n Строковые имена, стоимость всего
n * (avg_construction_of_individual_path_strings_off_filesystem)
С точки зрения пространства, объем памяти массива n Файловых объектов будет:
n * (avg_string_path_size + 32_bits_of_prefix_length + size_of_File_object_itself)
, тогда как массив n Строковых объектов будет
n * avg_string_path_size
Для простоты и удобства я бы использовал массив строк. Я бы даже не удосужился дать какую-либо оценку. Проще быть лучше в большинстве случаев. И эта мелочь имеет значение, только если вы работаете с очень ограниченным устройством (например, с мобильным телефоном).