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
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