instanceof
操作:
决定对象是否是指定类型的实例
指令格式:
instanceof
indexbyte1
indexbyte2
指令码:
instanceof = 193 (0xc1)
指令执行前后的栈顶状态:
..., objectref →
..., result
描述:
objectref是线程栈顶部弹出的类型的引用,无符号数indexbyte1和indexbyte2共同构建成一个索引(indexbyte1<<8|indexbyte2)指向运行时常量池中的类.
如果objectref为null,result=0;
如果objectref为指定类(resolved class),数组,接口的实例,则result=1
否则result=0;
举例说明:
如果S是objectref所指向的类,T为指定类(resolved class),在下列情况下result=1:
-
如果S是一个class:
- 如果T为class,则S extends T,或者S等于T
- 如果T为interface,则S implements T
-
如果S是一个class:
- 如果T为interface,则T为Object
- 如果T为interface,则S extends T,或者S等于T
-
如果S是一个array,SC[],数组元素为SC:
- 如果T为class,则T为Object
- 如果T为interface,则T 为数组的子类(见JLS4.10.3)
-
如果T是一个array,TC[],数组元素为TC
- TC和SC是相同的原始类型
- TC和SC都是class,SC可以在运行时转换为TC
JVM具体的实现
论文Fast subtype checking in the HotSpot JVM
问答请教一个share/vm/oops下的代码做fast subtype check的问题
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。