Quando passi un oggetto ad un metodo, gli viene passato il reference all'oggetto cosa che non accade per tipi primitivi e gli oggetti String, di cui viene eseguita una copia.
Quindi quando tu passi "s" al costruttore di es4, quell'oggetto conterrà un reference ad un oggetto List caricato nell'heap, e qualunque modifica effettuata su quell'oggetto sarà visibile dall'oggetto es4 creato.