Supponiamo di avere il seguente codice:

codice:
String s = null;
if(s == null || s.contains("aaa")){
 System.out.println("qualcosa");
}
Ovviamente si tratta di un esempio banale e dovrebbe sempre stampare "qualcosa".
Mi ricordo pero' che in C l'ordine di valutazione dei fattori di una operazione
OR o AND e' lasciato a discrezione del compilatore.

Nell'esempio qui sopra e' cruciale che s == null venga valutata prima di
s.contains("aaa") e che la sua valutazione interrompa immediatamente la valutazione dell'intera espressione nell'if. Ovvero s.contains("aaa") non deve essere valutata al fine di non avere una NullPointerException.

Mi chiedevo se le specifiche Java danno qualche garanzia a riguardo oppure se le decisioni siano lasciate ai singoli implementatori di virtual machine.