Constante em tempo de compilação

public class Numero {

public static void main(String[] args){

int i = 7;

byte b = i;

}

}

Javac:

Numero.java:4: possible loss of precision

byte b = i;

^

required: byte

found: int

1 error 

—————————————————————————

public class Numero {

public static void main(String[] args){

final int i = 7;

byte b = i;

}

}

Javac:

ok

—————————————————————————

public class Numero {

public static void main(String[] args){

final int i;

i = 7;

byte b = i;

}

}

Javac:

Numero.java:5: possible loss of precision

byte b = i;

^

required: byte

found: int

1 error

 

 

O que muda do primeiro para o segundo código é que a variável i (no segundo caso) é declarada como ‘final’ e é atribuida um valor. Portanto, para o compilador ela é um constante em tempo de compilação.

 

Veja:

Arup when you define a field as final and assign it a value with the declaration, then it becomes a compile time constant. They get special treatment by the compiler. They can be used in case labels, assigned to a smaller datatype if in range etc. This is because they actually act like literals. When the compiler compiles the class, it replaces the name of the final field with the actual value of the final field.

 
 

Colado de <http://www.coderanch.com/t/442053/java-programmer-SCJP/certification/Assignment#1966601>

Esta entrada foi publicada em Java com as etiquetas , . ligação permanente.

Uma resposta a Constante em tempo de compilação

  1. Foster diz:

    Detalhezinho chato de entender…

    Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s