Java中的instanceof運算子的執行原理和使用參考 Java中的instanceof運算子的執行原理和使用參考
阿新 • • 發佈:2018-11-30
原
Java中的instanceof運算子的執行原理和使用參考
2017年11月13日 09:28:34 boker_han 閱讀數:894<span class="tags-box artic-tag-box"> <span class="label">標籤:</span> <a data-track-click="{"mod":"popu_626","con":"java"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=java&t=blog" target="_blank">java </a><a data-track-click="{"mod":"popu_626","con":"基礎"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=基礎&t=blog" target="_blank">基礎 </a><a data-track-click="{"mod":"popu_626","con":"運算子"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=運算子&t=blog" target="_blank">運算子 </a> <span class="article_info_click">更多</span></span> <div class="tags-box space"> <span class="label">個人分類:</span> <a class="tag-link" href="https://blog.csdn.net/boker_han/article/category/7288408" target="_blank">Java基礎 </a> </div> </div> <div class="operating"> </div> </div> </div> </div> <article class="baidu_pl"> <div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"> <div class="article-copyright"> 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/boker_han/article/details/78517072 </div> <div id="content_views" class="markdown_views"> <!-- flowchart 箭頭圖示 勿刪 --> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg> <p><strong>Java中instanceof運算子</strong></p>
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>