salve ragazzi, ho un dubbio in testa che nn riesco a risolvere: c'è differenza nello scrivere & o &&, e | oppure || ?
salve ragazzi, ho un dubbio in testa che nn riesco a risolvere: c'è differenza nello scrivere & o &&, e | oppure || ?
Quelli doppi hanno un comportamento che viene chiamato "short-circuit". Ovvero il secondo operando non viene nemmeno valutato se dal primo operando si può già determinare il risultato complessivo.Originariamente inviato da DiEgOvEs
salve ragazzi, ho un dubbio in testa che nn riesco a risolvere: c'è differenza nello scrivere & o &&, e | oppure || ?
x < 5 && y > 4
Se x < 5 è false, si sa già che il risultato complessivo della AND è false perché qualunque sia il risultato di y > 4 (true o false), non cambierebbe nulla per la AND. Pertanto y > 4 non viene affatto valutato.
Se sono semplici variabili non cambierebbe molto ma immagina che ci sia y++ > 4. Con un && la comparazione y > 4 e poi il post-incremento di y vengono fatti solo se x < 5 è true!
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ok grazie mille per il chiarimento...! quindi comunque queste abbreviazioni non hanno molto senso nel caso dell'or giusto?
No, vale anche per l'OR: | non short-circuit e || che è short-circuit. In x || y, se x è true, allora y non viene valutato.Originariamente inviato da DiEgOvEs
quindi comunque queste abbreviazioni non hanno molto senso nel caso dell'or giusto?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
andibin, ti faccio la domanda al contrario allora..
io da 10 anni uso sempre e solo quelli doppi, non conoscevo sta differenza...
a cosa serve il singolo | o il singolo &..??
mi sembra meglio usare sempre il doppio no ??
odio chi parla di politica..
anzi vorrei fondare un partito contro tutto ciò
idealmente riducono le operazioni di confronto... ragionando in maniera "infinita" se hai un if con infinite preposizioni, con quelle doppie le analizza tutte, con le singole appena vede che va bene, parte subito con le istruzioni successive, riducendo il tempo di analisi
ah avevo capito il contrario..Originariamente inviato da DiEgOvEs
idealmente riducono le operazioni di confronto... ragionando in maniera "infinita" se hai un if con infinite preposizioni, con quelle doppie le analizza tutte, con le singole appena vede che va bene, parte subito con le istruzioni successive, riducendo il tempo di analisi
odio chi parla di politica..
anzi vorrei fondare un partito contro tutto ciò
si scusami è il contrario...ho fatto confusione...!![]()
Dipende .... ci sono dei casi in cui serve assolutamente il doppio invece che il singolo.Originariamente inviato da morphy79
mi sembra meglio usare sempre il doppio no ??
Esempio:
Se s fosse null (quindi s != null è false) allora NON deve fare s.length() altrimenti lancerebbe un bel NullPointerException!! Quindi con && si ha il "short-circuit" e in questo caso è assolutamente appropriato e anzi necessario.codice:public void metodo(String s) { if (s != null && s.length() > 0) { // Solo se s non è null e non è vuoto .... } }
Se avessi usato solo &, se s è diverso da null allora testa la lunghezza che è fattibile. Ma se s fosse null farebbe comunque il secondo test sulla lunghezza e allora sarebbe un problema.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
capito grazie, ma il dubbio rimane..Originariamente inviato da andbin
Dipende .... ci sono dei casi in cui serve assolutamente il doppio invece che il singolo.
Esempio:
Se s fosse null (quindi s != null è false) allora NON deve fare s.length() altrimenti lancerebbe un bel NullPointerException!! Quindi con && si ha il "short-circuit" e in questo caso è assolutamente appropriato e anzi necessario.codice:public void metodo(String s) { if (s != null && s.length() > 0) { // Solo se s non è null e non è vuoto .... } }
Se avessi usato solo &, se s è diverso da null allora testa la lunghezza che è fattibile. Ma se s fosse null farebbe comunque il secondo test sulla lunghezza e allora sarebbe un problema.
un solo & a che serve ??
non conviene sempre usare && (come tra l'altro faccio) ??
odio chi parla di politica..
anzi vorrei fondare un partito contro tutto ciò