Somar variáveis Vs. somar literais (ou constantes em tempo de compilação)

Para o compilador a soma de dois literais inteiros (ou constantes em tempo de compilação) é diferente do que a soma de duas variáveis inteiras

 
 

Se a operação consistir na soma de duas variáveis inteiras (seja: byte, short, int) o resultado sempre será do tipo int.

byte b1 = 7;

byte b2 = 12;

byte b3 = b1 – b2; /*ou*/ byte b4 = b2 + b2;
// não compila pois tem que ser explicitamente convertido

// o que ocorre acima é que ambas as operações podem “estourar” a capacidade da variável declarada “byte b3 e byte b4”

Teste.java:8: possible loss of precision

byte b3 = b1 – b2;

required: byte

found: int

 
 

 
 

byte b3 = (byte) (b1 – b2); // aqui convertemos o resultado que é do tipo ‘int’ para o tipo ‘byte’

 
 

short s1 = 10, s2 = 20, s3 = s1 + s2;
// idem acima: também não compila pois tem que ser explicitamente convertido. (s1 + s2 é um int)

 
 

short s1 = 10, s2 = 20, s3 = (short) (s1 + s2); // compila (foi realizada a devida conversão)

 
 

O tipo do resultado da soma de dois literais (ou constantes em tempo de compilação) inteiros poderá ser (narrow than box) contanto que caiba na variável de destino.

 
 

// No caso abaixo o resultado que é um int é ‘narrowed’ para byte para poder caber na variável b. (os literais 7 e 12 são constantes em tempo de compilação)

byte b = 7 + 12; // compila (narrow o resultado int ’19’ para byte)

Short sh = 7+7; // compila (narrow o resultado int ’14’ para short than box short para Short)

short sh = 7+7; // compila (narrow o resultado int ’14’ para short)

Short sh = 64000 + 1000;
// não compila pois o resultado que é um ‘int’ estoura a capacidade de ser um short

 
 

final short s1 = 10, s2 = 20, s3 = s1 + s2; // compila (os argumentos s1 e s2 foram declarados como ‘final’ e, portanto são considerados como Literais ou constantes em tempo de compilação para o compilador.)

 
 

Esta entrada foi publicada em Java com as etiquetas , . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s