[OCPJP6] 021 – Atribuições

Cast de tipos primitivos

No post anterior vimos um exemplo de cast com tipo primitivo, vamos complementar o assunto. Veja algumas regras abaixo:

  • Toda soma de número inteiros resulta em int (como vimos no post anterior)
  • Todo número inteiro é implicitamente int. Tome cuidado com o tamanho, talvez seja necessário converter para um tipo maior – por exemplo long
  • Todo número flutuante é implicitamente um double
  • Não precisa de cast quando ocorre ampliação
  • É necessário cast quando houver perda de precisão

Exemplos

Cast para um tipo menor que float (float > int)

float f1 = 128.987f;
int i1 = (int) f1; // PERDA DE PRECISAO
// s1 = 128

Cast para um tipo menor que float (float > short)

float f1 = 128.987f;
short s1 = (short) f1; // PERDA DE PRECISAO
// s1 = 128

Cast para um tipo menor que float (float > byte)

float f1 = 128.987f;
byte b1 = (byte) f1;
// E agora? 128?

Um ponto de atenção no exemplo acima, byte vai de -128 até 127! Qual seria o resultado?

-128 será a resposta, porque a JVM irá remover os primeiros (esquerda) 24 bits, dando o resultado -128.

// Compare os resultados
Integer.toBinaryString((byte)128);
Integer.toBinaryString(-128);

Cast para um tipo maior que float (float > double)

float f1 = 128.545f;
// 32 bits cabe dentro de 64 (cast implicito)
double d1 = f1;
// d1 = 128.98699...
}

Adicional (pegadinhas de cast)

byte b1 = 128; // NÃO COMPILA, certo?

byte b2 = 3;
b2 += 7; // COMPILA :O

byte b3 = 3;
b3 = b3 + 7; // NÃO COMPILA (ahhhh)
b3 = (byte) (b3 + 7); // AGORA COMPILA

No exemplo acima b2 += inclui o cast implicito =D

Comentem, estendam o assunto… Compartilhem =)

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s