Casting com tipos primitivos

Casting é um recurso do java, que te possibilita mudar( moldar ) um valor de tipo para outro.
Às vezes isso é feito "automaticamente", o que chamamos de casting implicito e também pode ser feito por você mesmo, casting explícito.

Um exemplo de casting explícito:
int num1 = 10;
short num2;
// Olha o casting explícito rolando
num2 = (int) num1;

Entendeu como foi usado ? (tipo) varQueSeraMoldada

E por que no caso acima o java não nos permite fazer num2 = num1 direto ?
Por que num1 é do tipo int, que é maior que short. Um inteiro( 16 bits ) é maior que um short( 8 bits ) à nível de armazenamento.

Tamanho dos tipos:
tipo tamanho
boolean – 1 bit
byte – 8 bits
char – 16 bits
short – 16 bits
int – 32 bits
float – 32 bits
double – 64 bits
long – 64 bits

Observações sobre tipos primitivos
Boolean - Não pode ser moldado para nenhum outro tipo, tanto implicitamento quando explicitamente.
Char - Nenhum outro tipo pode ser moldado para char.
Long é semelhante a um inteiro, mas com uma possibilidade maior de números.

Muitas vezes quando você está estudando o assunto se depara com tabelas mostrando todos os
os castings possíveis entre cada tipo primitivo…

Como essa abaixo :

Ai você se pergunta, irei ter de gravar tudo isso ?
Me fazendo a mesma pergunta, tentei entender como funcionava a coisa, e a partir disso vi que…

Com relação a casting implícito( automatico )

  1. Todo tipo pode ser moldado para um superior a ele, exceto float --> long, pois
    possuem características diferentes.

  2. Nenhum tipo pode ser convertido para outro com tamanho inferior a ele.
    O java faz isso como medida de segurança para que não haja risco de
    perda de precisão do valor. Você entederá isso lá embaixo na prática em um exemplo.

  3. Um tipo pode ser moldado para um outro de mesmo tamanho(bits),
    quando possuirem características semelhantes.
    Os tipos primitivos de mesmo tamanho são:
    char e short ( 8 bits )
    int e float ( 32 bits )
    double e long ( 64 bits )

Legenda :
–> : ocorre casting implícito
-/-> : não ocorre casting implicito

char e short :
char -/-> short ( não ocorre casting implicito ( moldar ) de um char para short )
short -/-> char

float e int :
float --> int ( ocorre casting implicito de float para int, pois o float possui tbm as características de um int )
int -/-> float

long e double :
long --> double ( ocorre casting implicito, pois o double possui tbm as características de um long )
double -/-> long ( n se esqueca que um long é bem parecido com um int ou seja bem diferente de um valor quebrado, representado com pontos flutuantes )

Depois de enterder isso. achei mais fácil de identificar quando ocorre o casting implicito.

E caso não ocorra o casting implicito, e você tiver necessidade, use o casting explicito.
Ai vão alguns exemplos.

double num1 = 10.5;
int num2 = (int) num1; ( nesse caso o valor 10.5 será arredondado para 10)

Se lembra quando falamos lá em cima sobre perda de precisão no valor a ser moldado ?
Então este é um exemplo, onde o java tem motivos para não deixa isso acontecer automaticamente,
1º - Pois um double é bem maior que um int a nível de armazenamento.
Para o java é como se fosse tivesse querendo guardar um elefante dentro de um armário.
2º Isso acontecendo automaticamente você iria perder 0.5 do valor original, já pensou se fosse uma aplicação usada na bolsa de valores ? que problemão hein, continuando…

char num1 = ‘a’;
short num2 = (short) num1;

float num1 = 5.37f;
int num2 = (int) num1;

Nesse exemplo acima devemos colocar o f após o número, pois todo valor com ponto flutuante é considerado como double, logo sem o f você teria que fazer um casting para float: (float) 5.37 hehe

Bom então é isso, caso tenham dúvidas, críticas, observações eu irei aceitá-las amarradão, pois estou iniciando em Java e isto será
bom para aprofundar conhecimentos.
Falei sobre o assunto, pois talvez possa ser útil em questões de certificação e até mesmo para conhecer melhor a linguagem.
Espero ajudar !
E para quem está começando como eu, indico a apostila da caelum, que é muito boa.
Aqui vai o link para download : http://www.caelum.com.br/downloads/apostila/caelum-java-objetos-fj11.pdf

Uma boa semana a todos !