Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dúvida no Ex. 8 da Aula 7 - Casting

Ok concordo que um double nao pode ser colocado em um float, mas um int não pode ser colocado dentro de um byte, estou certo?!

6 respostas

Oi Rodrigo, faz sentido. Mas com os valores menores que int, a regra muda um pouco. O compilador consegue faz a checagem e quando o valor cabe no intervalo suportado ele deixa passar.

Exemplo. O byte suporta valores no intervalo entre -128 até 127. Qualquer int atribuído dentro desse intervalo, o compilador deixa passar.

byte a = 12; // compilador legal

Um número fora do intervalo, não compila:

byte a = 189; // tipos incompatíveis. tentando atribuir int a um byte

É bom lembrar que operações aritméticas com tipos menores que int sempre retornam int, por isso o código a seguir não compila mesmo que o resultado esteja no intervalo suportado pelo byte:

byte a = 1;
byte b = 2;
byte c =  a + b; // erro. deveria ser int c = a - b;

Faz sentido?

Ok. Mas no exercício Float f=3.0; É um double que esta dentro do intervalo do float nao?! No mesmo caso que o int esta dentro do byte.

solução!

Está certo, Rodrigo. Mas o tratamento que o java dá é diferente. Mesmo que o double esteja no intervalo de um float, não é possível tal atribuição.

O caso em que o compilador permite se aplica apenas para os tipos númericos menores que int, que são: short, byte e char.

Você também não consegue atribuir um long a um int mesmo que ele esteja no intervalo do int.

Faz sentido?

AAAAAAAAAaaaaa sim .. agora entendi. Obrigado pela paciência Lucas!

Opa Rodrigo, que bom! Qualquer dúvida é só abrir um tópico que tentamos responder. :)

Bons estudos! Abraço.

Valeu Lucas, tirou minha dúvida também.