原
Java中的instanceof运算符的执行原理和使用参考
Java中的instanceof运算符用来判断一个对象是否属于指定的类以及该类的后代类,也可以判断一个对象所属的类是否实现了指定的接口,如果属于返回true,否则返回false;
instanceof运算符的使用:boolean result = obj instanceof ClassName/Interface;
这里需要注意的是:obj一般是存放对象引用的对象变量,而instanceof运算符是将obj中引用的对象实例的类型与指定类型ClassName进行比较;如果obj中存放的是类A的实例对象的引用,则instanceof运算符将比较类A是否与类名为ClassName的类是同一个类,或者类A是否继承于类名为ClassName的类,即是否为类名为ClassName的类的后代类,或者obj是否为实现了接口Interface的类的实例,如果符合上述条件之一,则返回结果为true;否则返回false;
下面是用于验证上述结论的示例代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
package com.verify_instanceof;
public class TestInstanceOf {
public static void main(String[] args) {
//下面四行代码用来证明:instanceof运算符是判断对象变量中存放的引用的所属类是否与指定类相同,或者为指定类的后代类;而不是判断对象变量的所属类是否为指定类,或指定类的后代类
A a1 = null;
RootInterface ra = new A();
System.out.println("a1 instanceof A:"+(a1 instanceof A));//null不是A类的实例对象,也不是A类的后代类的实例对象,故返回结果为false;
System.out.println("ra instanceof RootInterface:"+(ra instanceof RootInterface));//true,原因在于对象变量ra中存放的引用的所属类为类A,而类A实现了接口RootInterface,可以理解为类A是接口RootInterface的子类
System.out.println("ra instanceof A:"+(ra instanceof A));//对象变量ra中存放的引用的所属类为A类,故返回结果为true;
//下面的代码用于验证只要对象变量中存放的引用的所属类是指定类或者是指定类的后代类,结果就为true;反之,结果为false;
RootInterface rb = new B();
RootInterface rc = new C();
System.out.println("rb instanceof A:"+(rb instanceof A));//true,原因在于对象变量rb中存放的是类B的实例对象的引用,而指定类为类A,类B为类A的直接后代类,故返回true
System.out.println("rb instanceof B:"+(rb instanceof B));//true,原因在于对象变量rb中存放的是类B的实例对象的引用,而指定类就是类B,两个类为同一个类,故返回true
System.out.println("rc instanceof A:"+(rc instanceof A));//true,原因在于对象变量rc中存放的是类C的实例对象的引用,而指定类为类A,类C为类A的间接后代类,故返回true
System.out.println("rb instanceof C:"+(rb instanceof C));//false,原因在于对象变量rb中存放的是类B的实例对象的引用,而指定类为类C,类B不是类C的后代类,故返回false
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
以下是运行结果:
<script>
(function(){
function setArticleH(btnReadmore,posi){
var winH = $(window).height();
var articleBox = $("div.article_content");
var artH = articleBox.height();
if(artH > winH*posi){
articleBox.css({
'height':winH*posi+'px',
'overflow':'hidden'
})
btnReadmore.click(function(){
if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){
if(!window.csdn.anonymousUserLimit.judgment()){
window.csdn.anonymousUserLimit.Jumplogin();
return false;
}else if(!currentUserName){
window.csdn.anonymousUserLimit.updata();
}
}
articleBox.removeAttr("style");
$(this).parent().remove();
})
}else{
btnReadmore.parent().remove();
}
}
var btnReadmore = $("#btn-readmore");
if(btnReadmore.length>0){
if(currentUserName){
setArticleH(btnReadmore,3);
}else{
setArticleH(btnReadmore,1.2);
}
}
})()
</script>
</article>