Widening e Boxing

 

Código 1:

class AddBoxing {

static void go(Integer x) {

System.out.println(“Integer”);

}

static void go(long x) {

System.out.println(“long”);

}

public static void main(String [] args) {

int i = 5;

go(i); // which go() will be invoked?

}

}

Output:

long

 

Código 2:

class AddBoxing {

static void go(Integer x) {

System.out.println(“Integer”);

}

static void go(Long x) {

System.out.println(“Long”);

}

public static void main(String [] args) {

int i = 5;

go(i); // which go() will be invoked?

}

}

Output:

Integer

Se só existisse a verão do método go com Integer, o compilador a invocaria. Da mesma forma se só existisse a versão com long o compilador a usaria para manipular a invocação do método. Neste caso (código 1), o compilador tem duas opções: (1) ou ele realiza o BOXING para chamar a versão com Integer; (2) ou ele realiza o WIDENING para chamara a versão com long….

 
 

o compilador sempre optará por WIDENING ao invés de BOXING. Por isso a resposta do código 1 (acima) é (long). Java 5 designers decidiram que a regra mais importante deve ser a preexistência. Código deve funcionar da maneira que costumava fazer.

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