quinta-feira, 10 de abril de 2014

Casting

Você pode se deparar em uma situação, em que precise atribuir um valor de um tipo de variável a outro tipo. Tal como atribuir um valor um inteiro a um double (ponto flutuante), neste caso esta operação funcionara normalmente.
Porem se você tentar fazer o contrario atribuir a uma variável tipo double a uma variável do tipo inteiro.  

double d = 3.1415;
int i = d; // não compila

Este código não compilaria. O código acima é bem parecido com isso:

int i =  3.1415;

O mais interessante, é que nem mesmo o seguinte código compila:

double d = 5; // ok, o double pode conter um número inteiro
int i = d; // não compila

Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro desse
double no momento da execução. Esse valor pode ter sido digitado pelo usuário, e ninguém vai garantir que
essa conversão ocorra sem perda de valores.

Já o caso a seguir ocorre o contrario:

int i = 5;
double d2 = i;

O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto žutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável
double, então não existem problemas no código acima.

Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro. Para
fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro. Esse processo recebe o nome de casting.

double d3 = 3.14;
int i = (int) d3;

O casting foi feito para moldar a variável d3 como um int. O valor de i agora é 3. O mesmo ocorre entre valores int e long.

long x = 10000;
int i = x; // não compila, pois pode estar perdendo informação

E, se quisermos realmente fazer isso, fazemos o casting:

long x = 10000;
int i = (int) x;


Alguns castings aparecem também:

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ção, para fazer isso funcionar
podemos escrever o seguinte:

float x = 0.0f;

A letra f, que pode ser maiúscula ou minúscula, indica que aquele literal deve ser tratado como float. 

Outro caso, que é mais comum:

double d = 5;
float f = 3;
float x = f + (float) d;


Você precisa do casting porque o Java faz as contas e vai armazenando sempre no maior tipo que
apareceu durante as operações, no caso o double. E, uma observação: no mínimo, o Java armazena o resultado em um int, na hora de fazer as contas. 

Até casting com variáveis do tipo char podem ocorrer. O único tipo primitivo que não pode ser
atribuído a nenhum outro tipo é o boolean.

Abaixo estão relacionados todos os casts possíveis na linguagem Java, mostrando a conversão de
um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e automático, ou
seja, você não precisa indicar o cast explicitamente (lembrando que o tipo boolean não pode ser
convertido para nenhum outro tipo).


Tamanho dos tipo 
Na tabela abaixo, estão os tamanhos de cada tipo primitivo do Java.







Referências:
Apostila do curso FJ-11 - Java e Orientação a Objeto. Endereço: http://www.caelum.com.br/apostila-java-orientacao-objetos/ - acessado em 06/04/2014 às 19:35:25 pm.



Nenhum comentário:

Postar um comentário