Avec Mon Plaisir

Opérateur Ternaire Java

⌚ Reading time: 2 minutes utilisateur2452103 Pourquoi ce code fonctionne-t-il? Float testFloat = null; Float f = true? null: 0f; Et pourquoi cela lève-t-il une exception? Float f = true? testFloat: 0f; Mais le plus étrange est que ce code s'exécute également avec succès sans aucune exception: Float f = testFloat; Il semble que l'opérateur ternaire de Java change le comportement. Quelqu'un peut-il expliquer pourquoi, s'il vous plaît? Rohit Jain Le comportement est spécifié dans JLS – Opérateur conditionnel: Si l'un des deuxième et troisième opérandes est de type primitif T, et que le type de l'autre est le résultat de l'application de la conversion boxing (§5. 1. 7) à T, alors le type de l'expression conditionnelle est T. J'insiste sur moi. Ainsi, dans le 2 sd Cas: Puisque le 3ème opérande est de type primitif( T), le type de l'expression serait de type float – T. Alors, déballage testFlotteur qui est actuellement un null référence à float aura pour résultat NPE. Quant au 1 st cas, la partie pertinente est la dernière: Sinon, les deuxième et troisième opérandes sont respectivement de types S1 et S2.

  1. Opérateur ternaire java.lang
  2. Opérateur ternaire java.fr

Opérateur Ternaire Java.Lang

h> void fct1(void) { printf("fct1()");} void fct2(void) printf("fct2()");} int main(void) (1)? fct1(): fct1(); return 0;} $ gcc main. c $. / fct1() En java non: class Test { static void fct1() ("fct1()");} static void fct2() ("fct2()");} public static void main(String[] args) (true)? fct1(): fct1();}} $ javac not a statement (true)? fct1(): fct1(); ^ 1 error Je n'ai encore rien trouvé de précis dans les specification de java là dessus. 7 janvier 2009 à 20:52:17 oui c'est de ça dont je parle, désolé Snooooopy de pas avoir été clair. apparemment j'ai trouvé la réponse, alors que je croyais avoir cherché dans tous les sens avant de poster ~~'. Citation Also notice that the ternary operator is an expression that returns a value based on the conditional phrase it evaluates. This is different than the if-then-else syntax, which executes a statement block based on it's conditional phrase. ça vient d' ici. 8 janvier 2009 à 8:53:25 Pendant qu'on parle de limite de l'opérateur ternaire, j'avais découvert un truc assez bizaroïde aussi.

Opérateur Ternaire Java.Fr

Pourquoi la sortie du code suivant est 9. 0 et non 9? Si l'opérateur ternaire n'est rien d'autre qu'une forme abrégée de if-else, alors pourquoi le compilateur Java fait-il la promotion de int pour doubler? public class Ternary { public static void main(String args[]) int a = 5; ("Value is - " + ((a < 5)? 9. 9: 9));}} Réponses: 9 pour la réponse № 1 Si l'opérateur ternaire n'est rien d'autre qu'une forme abrégée de if-else, alors pourquoi le compilateur Java fait-il la promotion de int pour doubler? Une expression conditionnelle a un seul type, quiles deuxième et troisième opérandes sont convertis en tant que nécessaire. Le JLS donne les règles déterminant le type d'expression, qui sont légèrement compliquées par l'auto-unboxing. L'opérateur conditionnel est sorte de juste un raccourci pour un if / else construire, mais pas le genre de sténographie que je pense que vous attendiez. Donc, votre code est équivalent à ceci: double value; if (a < 5) { value = 9. 9;} else { value = 9;} ("Value is - " + value); Ses ne pas court pour: ("Value is - " + 9.

Le format est: X? Y: Z Signification: Si x == Ture, la sortie du résultat est Y, sinon la sortie du résultat est Z Bien qu'elle puisse être jugée par le contrôle de flux if, cette instruction est très couramment utilisée en développement, ce qui peut rendre le code plus simple et plus facile à comprendre. public class Demo05 { public static void main ( String [] args) { //X? Y: Z(如果x==Ture,则结果输出为Y, 否则结果输出为Z) int score = 90; String a = score <= 60? "不及格": "及格"; System. out. println ( a);}}

Steam Styler Lisseur
July 29, 2024, 10:17 pm