Grohl:
primeiramente agradeço pela atenção de todos.
Então lsouza13 quer dizer quanto passar um valor para um método ela não faz a conversão implícita?
Como você mostrou se for passar o valor 7 para uma variável short ele faz a conversão agora para método não.
Sim, uma coisa que usei pra entender/memorizar isso quando fui fazer OCJP é o seguinte…
O código abaixo funciona. Mesmo vc passando o int, este 32767 é o último valor (positivo) que “cabe” num short.
Então, quando vc coloca o:
o compilador vai acusar erro. Ou seja, a conversão da atribuição é VERIFICADA pelo compilador (tempo de compilação).
Só que quando vc tem um método, o compilador não pode, em tempo de compilação avaliar se o que vc ta passando caberia numa variável short. Ou melhor, ele não foi feito pra avaliar isso. É detalhe de implementação da JVM mesmo.
Então, se vc tiver
e tiver a chamada pra esse método, tudo só será resolvido em tempo de execução.
Assim o que o compilador pode te garantir é, nunca passe um literal pra esse método do tipo int, porque não posso VERIFICAR o valor dele antes da execução. E vc poderia acabar me passando um int que não cabe no parâmetro do tipo short.
Uma outra forma de memorizar, é analisando do ponto de vista dos métodos, nas regras:
- ampliação
- auto(un)boxing
- var-args
(para saber mais veja pag 143 do livro da Kathy, versão em português).
Passando um int não se encaixaria em nenhuma regra a “volta” para short.
Se persistir dúvidas, vamos debatendo…
abs