Java non è un evoluzione di C++, ha la stessa sintassi ma non è una sua "evoluzione", si può parlare di evoluzione tra C e C++ ma non con Java.

Anche se dedek ha detto praticamente tutto il fondamentale aggiungo quello che credo manchi, come introduzione ci sono

Funzioni di C++ non supportate da Java
Funzioni uniche per Java
Funzioni condivise

Parecchie funzioni di C++ sono state appositamente tolte, senza ripetere quelle già dette ecco quelle che mancano:

- Java non ha strutture e unioni, sono ritenute ridondanti
- Java non supporta il sovreccarico degli operatori, sono solo un
zuccherino sintattico che potrebbe creare ambiguità
- Java non ha preprocessore, visto che in C++ queste direttive sono
meno importanti di C i progettisti hanno pensato che era ora di
eliminarli
- Java non esegue conversioni di tipo automaticamente, tutto deve
avvenire con cast espliciti
- Java non ha variabili o funzioni globali, tutto è in una classe
con conseguente scop limitato
- Java non ha distruttori ma finalize()
- Javanon ha typedef
- Java non ha unsigned
- Java esclude goto
- Non c'è delete, memoria totalmente automatica
- In Java TUTTI gli oggetti sono solo per riferimento, si deve sempre
usare nuw come si si creasse in C++ un puntatore ad esso

Poi ci sono funzioni che solo Java ha

- Multithreading supportato a livello di linguaggio, con C++ devi
usare le funzioni native dell'OS o qualche astrazione di terzi
- C++ non ha una funzione che corrisponda perfettamente ai package di
Java
- Breack e continue accettano etichette come destinazione
- I char Java usano Unicode a 16 bit, simile a wchar_t di C++,
facilita la portabilità fra le lingue usate nei prog
- Java ha >>>, che sarebbe uno spostamento a destra senza segno
- Java ha il javadoc, un commento per generare la documentazione
usando /** */ e vari tag
- Il tipo String in Java è un tipi incapsulato, quando in Java
fai "ciao" verrà creato un tipo String, in C++ non verrà creato un
oggetto string ma un char*, inoltre le stringhe in C++ si possono
usare solo includento i relativi headers e namespaces

Funzioni gestite in maniera diversa:

- In Java true e false non sono come in C++ il relativo numerico di 0
e != 0
- Java obbliga l'intercettazione di una eccezione, in C++ puoi se lo
vuoi.


Spero di aver detto tutto, tanto sono in vacanza appena mi viene in mente qualcosa o lo trovo da qualche parte posto.