Per essere piu' precisi, C# e Java NON SONO INTERPRETATI, ma si appoggiano ad una virtual machine. Benche' a livello di VM ci sia l'interpretazione (quando non entra in gioco il just in time compiler, alto passo di compilazione), non si puo' definire questi linguaggi come interpretato nellaccezione che si da a questo termine di solito.
In entrambi i casi, per avere l'eseguibile, si deve compilare.
Invece, ESTREMAMENTE piu' importante, perche' richiede un approccio distinto alla progettazione software, C# e Java sono linguaggi che utilizzano il garbage collector, quella che viene comunemente chiamata gestione automatica della memoria.
La gestione automatica della memoria NON E' UNA PANACEA. E' molto comoda, estremamente utile in certi tipi di applicazioni, ma a volte sono piu' i problemi che genera di quelli che risolve.