Literal int

2 respostas
rafabene

Esta dúvida eu não poderia deixar de enviar.

Até onde eu sabia, toda literal inteira era tratada como int. Ou seja, o fragmento de código abaixo geraria um erro de cast já que 1,2 e 3 seriam tratados como int e daria um erro de compilação conforme inclusive o Certification Guide pag. 109.

byte b = 1;

short s = 2;

char c = 3;

Só que no meu compilardor Sun 1.4.1 as atribuições são válidas. Agora fica a minha dúvida, caso tenha um questão como vi no simulado:

public class As{
    int i = 10;
    int j;
    char z= 1;
    boolean b;
    public static void main(String argv[]){
	As a = new As();
	a.amethod();
    }
    public void amethod(){
        System.out.println(j);
        System.out.println(b);
     }
}

E eu reponder que roda enquanto uma possível prova destualizada disser que dá erro na atribuição do “z” ?
É possível ter provas destualizadas ? É um bug da minha versão já que ainda não testei com 1.4.2 ?
Está na JLS ? O que devo colocar na prova ?

2 Respostas

rafabene

Ih Gente foi mal, agora que eu vi que no caso de literais inteiras acontece um “relaxamento” a regra.

ricardolecheta

o compilador irá fazer o cast implicitamente quando for uma “compile time constant”, isto é um número(1,2,3…) ou uma variável declarada como final. Se fugir esta regra vc terá que fazer o cast!

short s1 = 1;
char c1 = 1; 
		
// neste caso vc precisa colocar o cast! 
byte b1 = s1; // error: cannot convert from short to byte
byte b2 = c1; // error: cannot convert from char to byte
		
final short s2 = 1;
final char c2 = 1;
byte b3 = s2; // OK, s2 é final
byte b4 = c2; // OK
Criado 12 de agosto de 2003
Ultima resposta 12 de ago. de 2003
Respostas 2
Participantes 2