Non credo che ci possano essere problemi per i tipi di dato primitivo: il programmatore, infatti, deve preoccuparsi di inizializzare sempre le variabili. Se queste prendono valore da un'interazione con l'utente è sempre possibile decidere se esse sono state inizializzate oppure no. Come in questo caso:
codice:
int a = 0;  // Il programmatore inizializza sempre le proprie variabili
try {
   BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
   String leggi = br.readLine();
   a = Integer.parseInt(leggi);
} catch (Exception e) { ... }
// Se si sono verificate eccezioni la variabile contiene il valore 0,
// che evita qualsiasi tipo di problema
In questo codice la variabile è sempre inizializzata. Se si verificano eccezioni la variabile ha comunque il valore 0. Non si deve mai lasciare una variabile non inizializzata (regola numero 1 della programmazione).
Aggiungendo una variabile booleana, ad esempio, è possibile discriminare sull'avvenuta inizializzazione o meno da parte dell'utente.


Ciao.