Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Precedenza espressioni booleane

    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.


  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Bhe, ovviamente nel tuo caso verrà stampato a video solamente se:

    1) s è null;
    2) s vale "aaa"

    Tieni presente che avviene tutto al runtime, in quanto s è un oggetto String.
    Ricapitolando, se utilizzi l'operatore OR di cortocircuito, ed s == null, quello viene stampato senza però che l'altra espressione viene valutata (in quanto per rendere vera la condizione è sufficiente che una di esse sia vera, quindi non serve controllare l'altra).

    Non vorrei avessi fatto confusione con OR (che prima valuta a sinistra, e poi a destra, indipendentemente dal risultato ottenuto).

  3. #3
    Java valuta la prima espressione e se essa è sufficiente a verificare l'intera condizione le altre espressioni non vengono valutate.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Precedenza espressioni booleane

    Originariamente inviato da Mr.Bloom
    Mi chiedevo se le specifiche Java danno qualche garanzia a riguardo oppure se le decisioni siano lasciate ai singoli implementatori di virtual machine.
    Non che io sappia. In entrambi i linguaggi vale la regola del "corto circuito"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.