D'accord, j'ai donc testé ce morceau de code et j'ai constaté qu'aucune exception n'était levée.
public static void main(String[] args) {
int[] list = {1,2};
if (list.length>2 && list[3] == 2){
System.out.println(list[1]);
}
}
Est-ce que la déclaration ici
if (list.length>2 && list[3] == 2)
signifie que si la première condition est fausse, nous n'avons même pas à vérifier la deuxième condition?
Ou cela équivaut à
if (list.length>2){
if (list[3] == 2){
...
}
}
?
Et que se passe-t-il s'il est écrit en C ou python ou dans d'autres langages?
Merci
Il est courant que les langages (Java et Python en font partie) évaluent le premier argument d'un AND
logique et terminent l'évaluation de l'instruction si le premier argument est false
. En effet:
De L'ordre d'évaluation des opérateurs logiques ,
Lorsque Java évalue l'expression d = b && c ;, il vérifie d'abord si b est vrai. Ici b est faux, donc b && c doit être faux, que c soit ou non vrai , donc Java ne prend pas la peine de vérifier la valeur de c.
Ceci est connu sous le nom de évaluation de court-circuit , et est également mentionné dans les Java docs .
Il est courant de voir list.count > 0 && list[0] == "Something"
Pour vérifier un élément de liste, s'il existe.
Il convient également de mentionner que if (list.length>2 && list[3] == 2)
est pas égal au deuxième cas
if (list.length>2){
if (list[3] == 2){
...
}
}
s'il y a un else
après. Le else
ne s'appliquera qu'à l'instruction if
à laquelle il est attaché.
Pour démontrer ce piège:
if (x.kind.equals("Human")) {
if (x.name.equals("Jordan")) {
System.out.println("Hello Jordan!");
}
} else {
System.out.println("You are not a human!");
}
fonctionnera comme prévu, mais
if (x.kind.equals("Human") && x.name.equals("Jordan")) {
System.out.println("Hello Jordan!");
} else {
System.out.println("You are not a human!");
}
indiquera également à tout humain qui n'est pas Jordan
qu'il n'est pas humain.
Oui. Si la première condition n'est pas remplie, les autres ne sont pas évaluées. Ceci est connu sous le nom de court-circuitage . Voir ici pour plus de détails. Notez que ce n'est pas particulier à Java et beaucoup d'autres langages feront de même.
Dès le javadoc:
Les opérateurs conditionnels
Les && et || Les opérateurs effectuent les opérations Conditional-AND et Conditional-OR sur deux expressions booléennes. Ces opérateurs présentent un comportement de "court-circuit", ce qui signifie que le deuxième opérande n'est évalué qu'en cas de besoin.
&& Conditionnel-ET || Conditionnel-OU
Oui, les deux utilisations sont sémantiquement équivalentes ... Autrement dit, à moins que la longueur ne soit> 2, le code est autorisé à accéder à plus que le 2e élément.
Dans le premier cas, ce qui compte c'est le &&
opérateur, pensez-y comme: si la première condition est vraie alors appliquer la deuxième condition.
La condition suivante a également une clause implicite "alors"
if length greater than two
then access third element
Vous avez spécifié dans votre instruction IF que les deux conditions doivent être remplies pour que System.out.println soit exécuté. Donc, si la première condition elle-même échoue, la deuxième condition n'est pas vérifiée (c'est pour l'opérateur AND). Mais la deuxième condition sera vérifiée si vous avez spécifié l'opérateur OR dans l'instruction If.
Si la première condition est fausse, elle ne vérifiera pas la deuxième condition comme quoi que ce soit && F = F encore une fois, cela dépend de l'opération binaire que vous faites. comme dans le cas de OR (||) si la première condition est vraie (T), il ne vérifiera pas la deuxième condition comme quoi que ce soit || T = T mais si c'est faux (F) alors il le fera certainement vérifier pour la deuxième