Aprendendo sobre Casting para SCJP
Neste artigo veremos como utilizar casting e promoção para a certificação Java, lembre-se que meu intuito não é fazer com que você aprenda casting para a programação e sim para fazer a prova de certificação SCJP.
Mas para que utilizamos isso? Bom, alguns valores são incompatíveis se tentarmos fazer atribuição direta. Por exemplo se um numero real costuma ser representado como double, tentar atribuir um valor int a ele vai causar um erro pois ele vai dizer “o inteiro dever ser double”, mas não se sabe se realmente o valor de double é double mesmo não é?
Por exemplo:
double d = 3.1513;
int i = d; //Não vai compilar
O mesmo erro vai acontecer no próximo caso.
int i = 3.1415;
O interessante que nem mesmo o próximo código vai compilar:
double d = 10; //Bom, isso já sabemos, o double pode conter um numero inteiro
int i = d; //Não compila do mesmo jeito.
Apesar de 10 ser um valor inteiro, ou int, o compilador não tem como saber se o valor estará dentro desse double no momento da execução. O valor pode ter sido digitado pelo usuário, e ninguém pode garantir que essa conversão ocorra sem perda de valores.
int i = 5;
double d2 = i;
Já o código acima compila pois sabemos que um número de ponto flutuante pode ser guardado dentro do double assim como um número sem ponto flutuante. Então todos os números inteiros representados no tipo int podem ser armazenados no tipo double, logo não existe problemas no código acima.
Mas o que acontece se precisamos que um número quebrado seja arredondado e armazenado num numero inteiro? Para fazer isso sem que haja um erro de compilação, é preciso ordenar que esse número quebrado seja moldado (cast) como um número inteiro. Esse processo recebe o nome de casting.
double d = 3.1415;
int i = (int) d;
O casting foi feito para moldar a variável d como int. O valor dela agora é 3.
O mesmo ocorre para o long.
long x = 10000;
int i = (int) x;
float x = 0.0;
O código acima não compila, pois todos os literais com ponto flutuante são considerados double pelo Java, E float não pode receber um double sem perda de informações, para fazer isso funcionar podemos escrever o seguinte código.
float x = 0.0f;
A letra f, que pode ser maiúscula ou minúscula, indica que o valor literal deve ser tratado como float.
Da mesma forma podemos fazer com L ou l do long, os castings possíveis podemos ver na tabela abaixo.
