existe uma diferença entre

memory allocation at compileTime e memory allocation at executionTime

na primeira o s.o. pode oferecer bytes 'contiguos' para a aplicacao

na primeira o s.o. pode oferecer bytes 'contiguos' para a aplicacao

Nas duas ele pode. Tanto o Array quanto o ArrayList são partes sequenciais da memória.

A diferença é que o ArrayList trata toda a alocação de memória para você.

Em C/C++ seria exatamente o mesmo funcionamento da função realloc