Pessoal, fiquei com uma dúvida lendo o capitulo 3.
Foi explicado que quando o compilador não encontra um método com o parametro do tipo exato passado para um método, ele vai amplia-lo para o próximo tipo mais baixo. No caso, o livro da o exemplo de um método que pede um long, e acaba recebendo um int. No caso o int é ampliado para long e tudo funciona, todos ficam felizes.
Agora, na próxima página são resumidas algumas regras a respeito de Sobrecarga-Boxing-Wide. E uma delas me chamou a atenção.
- NÃO é possível ampliar e depois fazer boxing. (Um int não pode se tornar um Long).
Ué, achei que tendo um código semelhante a esse, funcionaria transformar um int para Long.
static void show (Long){
.... alguma ação ....
}
static void main(Strings [] args){
int i = 10;
show(i);
}
Pelo que entendi, poderia ocorrer a seguinte situação. Eu passei um int, o compilador procura o mais próximo, ele não acha nem método com int nem método com long, apenas o Long. Nesse caso ele aceita que o método show(Long) seja usado, ampliando o int i para long, e depois o long para Long. Dessa forma, um int seria um Long ao contrário do que o livro disse.
Obrigado!