instanceof

testuje triedu objektu

Jasmin Syntax

 
 
    instanceof <type>
 

<type> je meno Java triedy, napr. java/lang/String. Alternatívne, na testovanie odkazov, <type>može byť typový descriptor poľa, napr. [[Ljava/lang/String;

Zásobník

Pred

Po

objectref

int-result

...

...

Popis

Inštrukcia instanceof je používaná na implementovanie operátora instanceof, ktorý testuje, či odkaz na objekt prislúcha danej triede.

Instanceof zoberie jeden parameter, <type>, type je meno Java triedy, alebo je to deskriptor poľa.

 

Počas behu, <type> je ošetrený. Potom, instanceof vyberie objectref zo zásobníka operandov. Ak je objectref instanciou type alebo podtriedy type, int 1 je vložený do zásobníka, ináč je vložený int 0. Ak je object null, výsledok je vždy 0. Ak je type interfejs, int – výsledok  bude 1 ak objectref implementuje interface, alebo 0 ak nie.

Príklad

 
; použitie instanceof na testovanie String:
    aload_1        ; vloží referenciu na objekt v lokálnej premennej 1do zásobníka
    instanceof java/lang/String;      ; testuje, či položka v zásobniku je String
    ifne HaveString                   ; ak áno, choď na HaveString
    return                            ; ináč návrat
HaveString:
    ; ak je dosiahnutý tento bod, lokálna premenná 1 obsahuje string
 
; tento príklad používa instanceof na zistenie, či lokálna premenná 1 obsahuje
; pole integerov
    aload_1                  ; vloží lokálnu premennú 1 do zásobníka
    instanceof [I            ; testuje, či položka v zásobníku je pole integerov
    ifne HaveIntegerArray    ; ak áno, skoč na HaveIntegerArray
    return                   ; návrat ak lokálna premenná 1 nie je pole intov
HaveIntegerArray:            
    ; ak je dosiahnutý tento bod, lokálna premenná 1 obsahuje pole integerov
 
; môžete používať instanceof na zistenie, či daný objekt implementuje daný interfejs,
; napr.
    aload_1                  ; vloží lokálnu premennú 1 do zásobníka
    instanceof java/lang/Runnable  ; testuje, či implementuje rozhranie Runnable
    ifne HaveARunnable       ; ak áno, skoč na HaveARunnable
    return                   ; ináč návrat
HaveARunnable:            
    ; ak je dosiahnutý tento bod, lokálna premenná 1 obsahuje referenciu na objekt
    ; ktorý implementuje rozhranie Runnable 

 

Bajtkód

V bajtkóde nasleduje kód instanceof 16- bitový integer bez znamienka. Je to index vstupu do spoločnej oblasti danej triedy.

Typ

Popis

u1

instanceof opcode = 0xC1 (193)

u2

index

Pozri tiež

checkcast