引用型別變數的強制轉換
編寫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的父類
}
}
相關文章
- 強制型別轉換型別
- 強制型別轉換之(==)型別
- 變數型別轉換變數型別
- 造型與強制型別轉換型別
- C++強制型別轉換C++型別
- JS在if中的強制型別轉換JS型別
- C C++ 強制型別轉換C++型別
- Pytorch變數型別轉換PyTorch變數型別
- JavaScript強制型別轉換的背後操作JavaScript型別
- 深入淺出說強制型別轉換型別
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- String.valueOf和強制型別轉換(String)的區別型別
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- javascript強制型別轉換與操作符JavaScript型別
- Javascript基礎:變數型別轉換JavaScript變數型別
- Python做int()強制型別轉換的時候,小數是如何取捨的?Python型別
- C語言資料型別、變數的輸入和輸出、進位制轉換C語言資料型別變數
- 兄弟連go教程(4)型別-引用及轉換Go型別
- JAVA型別轉換怎麼變Java型別
- JavaScript之number型別的數值轉換成某某進位制JavaScript型別
- 選擇is或者as操作符而不是做強制型別轉換型別
- (十五)C++學習 | 強制型別轉換 異常處理C++型別
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- sql最佳化-錯誤強制型別轉換導致索引失效SQL型別索引
- 強型別語言變數和資料型別的理解變數資料型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- C++11(列表初始化+變數型別推導+型別轉換+左右值概念、引用+完美轉發和萬能應用+定位new+可變引數模板+emplace介面)C++變數型別
- Java引用型別解析:掌握強引用、軟引用、弱引用和幻象引用的妙用Java型別
- JavaScript 字串轉換數值型別JavaScript字串型別
- Python3學習 (變數+值型別+引用型別+列表的可變+元組的不可變+運算子號)Python變數型別
- 第二天:識別符號、賦值、資料型別、格式符、常量、自動轉換、強制轉換。符號賦值資料型別
- 型別轉換型別
- interface{} 型別的轉換型別
- golang的型別轉換Golang型別
- PHP 字串強制轉換為數值問題PHP字串
- 資料型別,型別轉換資料型別
- 腦圖學習 JavaScript 之犀牛書【三 · 二】型別轉換、變數JavaScript型別變數
- Day08——強制轉換