Dúvida em questão

1 resposta
A

public static void main(String[] args) throws IOException { short s1 = 1; //1 char c1 = 1; //2 byte b1 = s1; //3 byte b2 = c1; //4 final short s2 = 1; //5 final char c2 = 1; //6 byte b3 = s2; //7 byte b4 = c2; //8 }
Galera, alguém pode me dizer porque a linha 7 e 8 nao dao comp failed?

Obrigado.

1 Resposta

R
aramalho, bom dia! As linhas 7 e 8 não tem nada de errado, você pode atribuir à novas variáveis valores de variáveis finais. Agora se tentassemos atribuir novos valores às variáveis s2 e c2 ocorreria erro de compilação.
public static void main(String[] args) {		
		short s1 = 1;        		//1  
		char c1 = 1;         		//2  
		byte b1 = (byte) s1;        //3  
		byte b2 = (byte) c1;        //4  
		final short s2 = 1; 		//5  
		final char c2 = 1;		  	//6  
		byte b3 = s2;     			//7  
		byte b4 = c2;  				//8
		s2 = 2;						//9  {erro de compilção não podemos atribuir novo valor a uma variável final}
		c2 = 2;						//10 {erro de compilção não podemos atribuir novo valor a uma variável final}

	}
como o valor de s2 e c2 são menores do que 128 e o compilador sabe que esse valor nunca vai se alterar, esse valor é particularmente válido para um tipo byte. Caso a variável não fosse final (variáveis s1 e c1) ou o valor de s2 e c2 fosse maior que o permitido por um tipo byte, a conversão cast deveria ser explicita. As linhas 3 e 4 dão erro de compilação, para corrigir é necessário efetuar um cast.
public static void main(String[] args) {		
		short s1 = 1;        		//1  
		char c1 = 1;         		//2  
		byte b1 = (byte) s1;        //3  
		byte b2 = (byte) c1;        //4  
		final short s2 = 1; 		//5  
		final char c2 = 1;		  	//6  
		byte b3 = s2;     			//7  
		byte b4 = c2;  				//8
	}
Criado 29 de junho de 2009
Ultima resposta 30 de jun. de 2009
Respostas 1
Participantes 2