2 votes

Quelle est la différence entre court/octet dans un paramètre et dans un bloc ?

Duplicata possible :
Bug d'Eclipse ? Quand un court-circuit n'est-il pas un court-circuit ?

En Java, je peux attribuer un short ou un byte à l'intérieur de blocs comme celui-ci :

short s = 20000;
byte  b = 120;

Parce que 20000 est un short et 120 est une valeur byte valeur, si j'essaie d'essayer :

short s = 67000;
byte  b = 128;

J'obtiendrai une erreur indiquant qu'il ne peut pas compiler à partir de int a byte donde

byte b = (byte)12232;

ne déclenchera même pas un avertissement indiquant que la valeur peut être perdue. Dans un appel de fonction, je suis de toute façon obligé de faire un casting :

void test(short s){}
test(1) //invalid
test((short)1) //valid

Alors que sur return les types, c'est bon à nouveau.

short test(){
    return 1; //valid
}

Pourquoi le compilateur décide-t-il parfois de connaître les limites des nombres (au moins à partir des constantes), alors qu'il semble l'oublier ailleurs ?

4voto

Jack Points 61503

Les littéraux numériques intégraux en Java sont de deux types seulement : int (qui sont déclarés comme 123 ), et long (qui sont déclarés comme 123L ).

  • short s = 1 est autorisé parce qu'il s'agit d'une affectation et qu'une conversion étroite est autorisée à cet endroit.
  • short s = 67000 ne fonctionne pas parce que vous dépassez la valeur maximale qui peut être représentée par une balise short
  • short s = (short)67000 fonctionne parce que vous placez un cast et demandez explicitement au vérificateur de type d'ignorer le fait que 67000 dépasse la valeur maximale.
  • test(1) ne fonctionne pas car il s'agit d'une invocation de méthode, une conversion étroite n'est pas autorisée (int -> short) et 1 est toujours évalué comme un littéral entier par le compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X