Nel codice qui sotto:Perché la variabile finale non è sempre un'espressione costante?
final int a;
a=2;
byte b=a; // error: possible loss of precision
Perché ottengo questo errore? Non è a
espressione costante di tempo di compilazione variabile finale e quindi implicitamente ridotto a byte durante l'assegnazione?
In altre parole non è il codice sopra equivalente a:
final int a=2;
byte b=a;
Infatti il compilatore non può essere così intelligente. – usr
@usr Questa è una religione seria e primitiva lì. Seriamente: Perché è così? I compilatori sono sensibili ai numeri '1',' 2', '4' ed ecc. Quando si moltiplicano. Il caso in questa risposta è chiaramente irrisolvibile, perché i valori restituiti da 'random' dipendono dal momento in cui il programma inizia. – LyingOnTheSky
@LyingOnTheSky Ma anche se il calcolo fosse deterministico e il compilatore potesse capirlo, non sarebbe comunque consentito trattarlo come un'espressione costante (eliminando la necessità del cast). È importante che ciò che è o non sia un programma java valido non dipende da quanto sia intelligente un particolare compilatore. – CodesInChaos