Le code ci-dessous me donne une erreur de temps de compilation Mismachatch: impossible de convertir de Int en octet fort> mais ci-dessous ne P> final int i = 10;
byte b = i;
5 Réponses :
Je pense que c'est parce que 10 convient à un octet, mais si l'entier était quelque chose qui prend plus de 8 bits, il ne serait plus possible de faire correctement cette mission. p>
Pour clarifier, ce qui permet de définir la finale permet au compilateur de traiter l'int comme une constante afin qu'elle puisse faire un pliage constant. Il empêche probablement l'affectation avec l'INT non finale car elle ne sait pas cette valeur à la compilation de la compilation et qu'elle pourrait être beaucoup plus grande que ce qu'un octet peut contenir. P>
Eh bien, le final code> indiquerait au compilateur que i code> est déclaré être 10 et devrait toujours être 10 et ne finira pas quelque chose de trop grand pour un octet.
ignorer mon commentaire. J'ai complètement mal compris la question.
Case 1: Compiler l'erreur car un int code> peut ne pas s'intégrer dans un octet code>; Un casting explicite est nécessaire
Cas 2: Le compilateur compile la 2e instruction sur octet b = 10; code> (comme i code> est final code>), donc aucune erreur p>
Je n'ai pas reçu pourquoi Compiler compile la 2e déclaration à l'octet B = 10
Parce que vous l'avez déclarée "finale" qui signifie que n ° où dans le code, la valeur jamais modifiée, les compilateurs peuvent donc faire une certaine optimisation et traiter simplement cela comme une valeur constante. Étant donné que la valeur est connue au moment de la compilation ne doit pas être plus grande qu'un octet, il vous permet de faire la mission.
Je suis final, ce qui signifie que sa valeur ne change jamais. Donc, une optimisation évidente que le compilateur est conforme à toute référence à chaque référence, par ex. byte b = 10. Si vous modifiez la valeur de i à, dites 128 (c'est-à-dire une valeur juste au-delà de la limite d'un octet), vous devriez également voir une erreur de compilation.
Je n'ai pas compris pourquoi Compiler compile la 2e déclaration à l'octet B = 10 - Anand P> blockQuote>
C'est parce que, vous demandez au compilateur que la variable 'i' détient «10» comme valeur toujours. Par conséquent, le compilateur remplacerait «I» avec «10» partout où il est référencé. Ce faisant, cela ferait le travail de JVM plus facile! P>
Case 1:
final int i = 128; byte b = i;
Essayez ceci comparer ceci avec p> Ce ll vous donner une idée de la rétrécissement implicite de Int à l'octet il ne faut que si la valeur attribuée est une expression constante p> p>
Es-tu sûr? Cela ne donne aucune erreur pour moi. Postez le message d'erreur.
1er code Snippet donne une erreur de temps de compilation .. Type Mismatch: impossible de convertir de Int à l'octet mais 2nd ne
Si vous essayez avec
finale int i = 128; code> Cela ne fonctionnera plus car il ne rentrera plus dans l'octet.@anand: Je pensais que tu me plaignais d'un deuxième extrait. Désolé pour ça.