Classes Wrappers vs valores primitivos

6 respostas
ffelipe

Olá !!

Por que a “linha 1” gera erro e a “linha 2” não ?

Short s =  new Short((short)2 + (short)4);   //linha 1
                  short a =((short)2 + (short)4);                    //linha2

Na “linha 1” o construtor da classe Short recebe dois valores inteiros e estes são
convertidos para o tipo short. A soma de dois valores do tipo short resulta em um valor do tipo int.
Um dos Construtores de short pede um valor do tipo short e no exemplo acima o valor passado é do tipo int.
Até ai eu entendi

Na “linha 2” temos dois valores do tipo int que são convertidos para short. A soma de dois
valores shorts resulta em um valor do tipo int. A variável “a” está recebendo um valor do tipo int e
não está gerando erro.
Não entendi

até mais !!

6 Respostas

peczenyj

por alguma razão na linha 1 o resultado é um inteiro e não um short

faça um cast ‘final’

Short s =  new Short((short)(2 + 4));   //linha 1
Alexandre_Saudate

Você mesmo respondeu sua pergunta…

O cast que você faz na primeira linha não é válido. Quando você disse que a variável a recebe um int, perceba que a mesma coisa está acontecendo com o Short s. O que você teria que fazer é o seguinte:

Short s = new Short((short)(2 + 4));
ffelipe

Por que a “linha 2” não gera erro ?

Alexandre_Saudate

Por que ocorre um cast automático, se não me engano.

Eu realmente não me lembro ao certo o porquê disso, mas se bem me lembro, a Virtual Machine reconhece automaticamente que , apesar de ser um int, é a soma de dois shorts e, portanto, cabe em um short (primitivo)

G

A JVM faz o calculo automático e como o resultado da soma dos dois valores é menor que o tamanho máximo aceito por um short, compila sem problemas.

exemplos: short o = 10; //funciona
short o = 10 * 10;//Funciona
short o = 10 * 4000;//Não funcionar por que o resultado é maior que a 2^15., limite di short.

khaoz

A razão é que a operação de cast tem precedência sobre a soma. Então ele faz o cast do número 2 para short, depois do número 4 e então soma e nessa soma o resultado é “promovido” a um inteiro.
Por isso o cast do jeito que o peczenvyj fez provavelmente funcione pois os parenteses fazem com que a soma ocorra primeiro e o resultado seja convertido a um short.

Criado 27 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 6
Participantes 5