2013-02-22 12 views
5
class Test{ 
    public static void main(String[] args){ 
     int a = 1; 
     int b = 5; 

     Integer c = new Integer(1); 
     Integer d = 5; //autoboxing at work 

     System.out.println(c.compareTo(d)); 
     System.out.println(a.compareTo(b)); 
    } 
} 

Perché non compila a.compareTo(b) (int cannot be dereferenced)? So che compareTo richiede oggetti, ma pensavo che la funzione di autoboxing avrebbe automaticamente creato uno uno Integer quando necessario. Perché in questo caso non si verifica l'autoboxing? E quali altri casi non si verificherà?Java no autoboxing per int per il metodo compareTo?

risposta

4

Dal Oracle tutorial on Autoboxing, i due casi in cui si verificherà boxe sono, quando primitive sono:

  • passato come parametro a un metodo che prevede un oggetto della classe corrispondente involucro.
  • Assegnato a una variabile della classe wrapper corrispondente.

L'espressione da valutare nell'esempio (a.compareTo(d)) non rientra in nessuno di questi scenari.

Ci sono alcune interessanti informazioni aggiuntive nello JCP proposal for autoboxing, che descrivono i meccanismi e le regole per la conversione dell'assegnazione, la conversione del richiamo del metodo e la conversione del casting.

Problemi correlati