Por que isso funciona normalmente? O que eu achava que acontecia era o seguinte:
1) 5 é um literal do tipo int (pois foi escrito diretamente no código fonte).
2) Assim, como Short é um tipo não primitivo, é necessário fazer o autoboxing do 5.
3) 5 é transformado em um objeto do tipo Integer.
4) Integer não é subclasse de Short, logo gera erro de compilação.
mesmo sendo 5 um int, converte-se implicitamente o 5 para um short, porque o valor é pequeno suficiente para caber em um primitivo short.
Acredito que seja aceito o “Short s = 5” pelo “princípio de mínima surpresa” (principle of least surprise) porque é realmente difícil entender por que é que é válido usar “short s = 5” mas não seja válido usar “Short s = 5”. É questão de ler com mais atenção a JLS.
E não, tais coisas absurdas não caem com tal nível de detalhamento.
rmala_ti
Pessoal, e qual o motivo que esse não funciona?
Num tem cast implícito de int pra short, não?
rmala_ti
Olhando a API, só aceita short, vejam:
static Short valueOf(short s)
Returns a Short instance representing the specified short value.
Short(short value)
Constructs a newly allocated Short object that represents the specified short value.
Tudo bem, mas o que intriga é que o cast implícito ocorre quando faz
V
vmsb11
rmalati:
Pessoal, e qual o motivo que esse não funciona?
Num tem cast implícito de int pra short, não?
de uma olhada no construtor de Short
publicShort(shortvalue);
ou seja vc tem que fazer isso na hora de criar
//isso impede que vc passe um valor fora dos limites do tipo short....newShort((short)5);oushortx=5;newShort(x);
T
TiagoTC
Outra coisa que me deixa com a pulga atrás da orelha é que isso não compila: