2014-10-10 10 views
7
int primitivI[] = {1,1,1}; 
Integer wrapperI[] = {2,22,2}; 


1. System.out.println(primitivI instanceof Object);//true 
2. System.out.println(primitivI instanceof Object[]);//Compilation Error Why ???? 
3. System.out.println(wrapperI instanceof Object);//true 
4. System.out.println(wrapperI instanceof Object[]);//true 

Qui ho due array di interi (primitivi che, involucro) di tipo ma ho avuto risultato diverso per instanceofoperatore instanceof in caso di primitiva e tipo avvolgitore matrice

vedere il numero della linea 2 e 4 la riga n. 4 verrà compilata correttamente e restituirà il risultato true, ma nel caso della riga 2, perché si verifica un errore di compilazione? Dalla riga 1 e 3 è chiaro che i due array sono istanza di oggetto ma in caso di Object[], perché i risultati di differiscono?

+1

great question :) –

risposta

1

JLS 15.20.2. dice:

Se un calco della RelationalExpression al ReferenceType verrebbe rifiutato come errore di compilazione, allora l'espressione relazionale instanceof produce anche un errore di compilazione. In una situazione del genere, il risultato dell'istanza di espressione non potrebbe mai essere vero.

Ciò significa che, se al momento della compilazione il compilatore sa che X non può essere instanceof Y, l'espressione X instanceof Y darebbe un errore di fase di compilazione.

è possibile ottenere esempi più semplici che non compilano, senza cercare con le matrici:

String s = "dgd"; 
System.out.println(s instanceof Integer); 

Allo stesso modo, il tuo secondo esempio non compila, in quanto int[] non può essere gettato a Object[]. Tutti gli altri esempi vengono compilati, dal momento che primitivI può essere trasmesso a Object e wrapperI può essere trasmesso a entrambi Object e Object[].

+0

thanks..but se primitivI è instanceof Object, quindi perché non è un'istanza di Object [] .. dove lo stesso caso è vero per wrapperI –

+1

@Nirav primitivel è un array, e quindi può essere lanciato a un oggetto, poiché un array è un oggetto. Non può essere lanciato su Object [], perché è una matrice di tipo primitivo, quindi non può essere lanciato su una matrice di Object. – Eran

+0

capito ... se prendo int a = 10 e poi controllo con instanceof allora mi darà anche errore di compilazione. qui sto controllando con array su instanceof Object, ecco perché mi dà risultato vero –

Problemi correlati