引用型別變數的強制轉換
編寫java程式時,引用變數只能呼叫它編譯時型別的方法,而不能呼叫它執行時型別的方法,即使它實際所引用物件確實包含該方法。
在強制轉換之前可以先用instanceof來判斷是否可以成功轉換,instanceof 的前一個運算元通常是引用型別變數,後一個通常是類。它用於判斷前面的物件是否是後面的類或其子類的例項,如果是返回true否則返回false。instanceof前面的運算元的編譯型別要麼與後面的類相同,要麼是後面類的父類,否則會發生編譯錯誤。
引用型別之間的轉換隻能把一個父類變數轉換成子類型別。如果試圖把一個父類例項轉換成子類型別,則必須這個物件實際上是子類例項才行(即編譯時型別為父類型別,執行時為子類型別),否則會發生ClassCastException異常。
public class Test {
public static void main(String[] args) {
Object o1=new Object();//o1的編譯型別是Object,實際型別是Object,是string的父類,所以可以強制轉換成string類
String o2=new String(); //o2的編譯型別是String,實際型別是String
Object o3=new String(); //o3的編譯型別是Object,實際型別是String
o2=(String)o1; //編譯時沒錯,執行時有錯(o2和o1的實際型別不一樣)
o2=(String)o3; //編譯時沒錯,執行時沒錯(o2和o3的實際型別一樣)
o3=(String)o1; //編譯時沒錯,執行時有錯(o1和o3的實際型別不一樣)
o3=o1; //編譯時沒錯,執行時也沒錯
}
}
在強制轉換之前可以先用instanceof來判斷是否可以成功轉換,instanceof 的前一個運算元通常是引用型別變數,後一個通常是類。它用於判斷前面的物件是否是後面的類或其子類的例項,如果是返回true否則返回false。instanceof前面的運算元的編譯型別要麼與後面的類相同,要麼是後面類的父類,否則會發生編譯錯誤。
public class Test {
public static void main(String[] args) {
Object a1=new String();
System.out.println(a1 instanceof Object); //返回true
System.out.println(a1 instanceof String); //返回true
System.out.println(a1 instanceof Math); //返回false,math是object的子類
System.out.println(a1 instanceof Comparable); //返回true,string實現了comparable介面
String a2=new String();
System.out.println(a2 instanceof Math ); //編譯錯誤因為a2不是math類,也不是math的父類
}
}
相關文章
- PHP 型別轉換&&型別強制轉換PHP型別
- 強制型別轉換型別
- java型別轉換與強制型別轉換(轉)Java型別
- 強制型別轉換之(==)型別
- C++ 的強制型別轉換C++型別
- JavaScript中的強制型別轉換JavaScript型別
- C++強制型別轉換C++型別
- 造型與強制型別轉換型別
- 變數型別轉換變數型別
- JS在if中的強制型別轉換JS型別
- C C++ 強制型別轉換C++型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- JavaScript強制型別轉換的背後操作JavaScript型別
- 在JavaScript中也玩變數型別強行轉換JavaScript變數型別
- 深入淺出說強制型別轉換型別
- c++四種強制型別轉換C++型別
- Pytorch變數型別轉換PyTorch變數型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- C++ 中四種強制型別轉換的區別C++型別
- javascript強制型別轉換與操作符JavaScript型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- Javascript基礎:變數型別轉換JavaScript變數型別
- String.valueOf和強制型別轉換(String)的區別型別
- Python做int()強制型別轉換的時候,小數是如何取捨的?Python型別
- JAVA基礎:Java變數型別間的相互轉換(轉)Java變數型別
- swift 3.0:as語法與強制型別轉換的一些理解Swift型別
- C++開發必看四種強制型別轉換的總結C++型別
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數
- 強型別語言變數和資料型別的理解變數資料型別
- char型別的數值轉換型別
- (十五)C++學習 | 強制型別轉換 異常處理C++型別
- 選擇is或者as操作符而不是做強制型別轉換型別
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- JAVA型別轉換怎麼變Java型別
- 兄弟連go教程(4)型別-引用及轉換Go型別
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別