2015-07-31 14 views
6

Poiché il doppio primitivo è rappresentato con la classe java.lang.Double, non dovrebbe essere double.class uguale java.lang.Double.class? (Questo naturalmente avviene anche su altri tipi primitivi troppo)Perché double.class non è uguale a java.lang.Double.class?

System.out.println(double.class == Double.class); 

uscita:

Result: false 
+0

sono letterali di classe diversa – Reimeus

+0

'java.lang.Double' esegue il wrapping/scatole a' double', ma non è la stessa cosa. –

+0

@Trojaner Perché si tratta di tipi diversi che non si comportano allo stesso modo. Ad esempio, non è possibile definire un 'Elenco ', ma è possibile definire un 'Elenco '. –

risposta

12

Double.class è l'oggetto della classe corrispondente al tipo involucro Double. double non è in realtà una classe, ma double.class è l'oggetto utilizzato in reflection per indicare che un argomento o un tipo restituito ha il tipo primitivo double.

3

double è un tipo primitivo, Double è un tipo di classe. C'è una proprietà nella classe Double denominata TYPE:

Ad esempio System.out.println(double.class == Double.TYPE); stampe true.

3

Sono due istanze distinte di Class<Double>. Questo normalmente non avviene (per gli oggetti ordinari), ma per le classi wrapper, questo è esattamente il modo di distinguere tra i campi del tipo primitivo e il tipo di wrapper in reflection.