Dúvida variavel local final

5 respostas
Gustavo_Santos

Bom dia galera !

Seguinte fui fazer aqui o Inquisition e errei esta questão, segue:

final int i;
		i = 127;
		byte b = i;
		System.out.println(b);

Bom eu já tinha visto algo parecido, e até onde sei, o fato de i ser final
e ter um “tamanho” que cabe no byte isso compilaria…

Alguém sabe explicar o porque de não compilar ?

Grato.

5 Respostas

evertonsilvagomesjav

Ueh um "int" cabe em "byte"? Onde vc viu isso?

So funciona se tiver um casting explicito ai.

final int i;   
	       i = 127;   
	       byte b = (byte)i;   
	       System.out.println(b);
luiz_renato

Rapaz,

Nesse caso se vc fizer assim compila:

final int i = 127; byte b = i; System.out.println( b);

Porque ainda não sei …
Uma boa questão.

Gustavo_Santos

Tenta assim Evertom:

final int i = 127;
		byte b = i;
		System.out.println(b);

Pelo fato de o compilador saber que i é final e tem um valor
que cabe no byte ele abre uma exceção.

A dúvida é, se eu declaro e inicializo ele libera.

se eu declaro, e depois inicializo, em uma outra linha ele da pau ? pq ?

FabioQuintana

Quando tu define “final” e seta um valor, entao este se torna constante, não pode mais ser alterado ao longo da execução…
sendo assim, “127” ocupa menos de 8bits, levando em conta q um byte tem 8bits, 127 cabe dentro de um byte…

agora, quando vc define um int (que em java tem 32bits), mesmo sendo final, e tenta setar ele ao longo do codigo e logo atribuir esse valor
para uma variavel do tipo byte, o compilador não pode garantir que o valor da variavel do tipo int será menor que 255 (menor que 8bits), pois ele
pode ser setado condicionalmente, assim nao há como garantir que ela vai “caber” em um byte, portanto gera uma inconsistência… e dai o erro.

espero ter ajudado…

Abraço.

Gustavo_Santos

Ajudou sim …

Vlw galerA !

Criado 16 de setembro de 2010
Ultima resposta 16 de set. de 2010
Respostas 5
Participantes 4