2011-06-07 12 views
11

¿Por qué este código se imprimirá int?Sobrecarga con Corto e int

public static void main(String[] args) { 
    short s = 5; 
    A(s); 
} 
public static void A(int a){ 
    System.out.println("int"); 
} 

public static void A(Short a){ 
    System.out.println("short"); 
} 
+0

¿Dónde está la clase? –

+2

corto o corto? –

+0

Cualquier clase es adecuada. Primero - corto, segundo - Corto. – ilalex

Respuesta

15

Porque el upcasting a int estaba en la versión 1.0 de Java y el auto-boxing se agregó en la versión 5.0. Cambiar el comportamiento rompería el código escrito para la versión anterior de Java.

Sin embargo, mezclar tipos como este sugiere que hay algo mal con su diseño, es solo algo que va a encontrar en los rompecabezas. ;)

+0

Esta es una pregunta de mi colega, que se está preparando para la certificación. – ilalex

+0

Si hubiera una pregunta de la entrevista, le sugiero que simplemente no escriba el código de esa manera porque es confuso. ;) –

12

Porque ensancha latidos boxeo

Motivo:

Debido ensanchamiento estaba allí mucho tiempo antes, donde el boxeo se introdujo más tarde a fin de no romper el código que hace esto.

+3

+1: por 4 versiones principales de Java. –

+2

También ** ampliando beats var arg ** –

Cuestiones relacionadas