TCP 的三次握手到底是在幹嘛 結束連結為什麼要握手4次?
阿新 • • 發佈:2021-12-01
- 自動型別轉換
把子類物件直接賦給父類引用叫做向上轉型,向上轉型可以自動轉換。
static class One { public void foo() { System.out.println("One"); } } static class Two extends One { public void foo() { System.out.println("Two"); } public void dosth(){ System.out.println("Two again"); } }public static void main(String[] args) throws Exception{ One t = new Two(); //向上轉型,即父類引用指向子類物件,此時子類物件的型別為父類的型別 t.foo(); t.dosth();//編譯錯誤 t = (Two)t; t.dosth();//編譯錯誤 ((Two) t).dosth();//編譯成功 }
- 強制型別轉換
把指向子類物件的父類引用賦給子類引用叫做向下轉型,要強制轉換。
One one = new Two(); //向上轉型,即父類引用指向子類物件,此時子類物件的型別為父類的型別
Two two = (Two)one; //向下轉型,需強制轉換,編譯成功
One one2 = new One();
two = (Two)one2; //便衣成功,執行失敗。報錯資訊為:java.lang.ClassCastException: com.xxx.One cannot be cast to com.xxx.Two
總結:
- 父類引用可以指向子類物件,子類引用不能指向父類物件。把子類物件直接賦給父類引用叫做向上轉型,向上轉型不用強制轉型,如One o=new Two()。把指向子類物件的父類引用賦給子類引用叫做向下轉型,要強制轉型,如Two t = (Two)o。向上轉型會丟失子類特有的方法,但是子類overriding父類的方法,子類方法有效。
- 對於強制型別轉換,且是引用型別,如果是父類向子類轉換,這種只牽扯到引用名義型別的轉換,具體的記憶體沒有什麼變化。
- 數值型別轉換
- 資料值型別按照範圍從小到大為:byte,short,char,int,long,float,double
- 滿足下列兩種要求將執行自動型別轉換:1.兩種型別是相容的;2.目的型別的範圍比來源型別大。例如int型別比所有byte合法型別大,因此不要求顯式強制型別轉換。對於數字型別,整型和浮點型都是彼此相容的,但是數字型別和字元型別和布林型別是不相容的,字元型別和布林型別也不是互相相容的。
- 自動型別轉換不能滿足所有的轉換需求,比如int型變數賦值給byte型變數,這種轉換不會自動進行,因為byte型比int型範圍小。為了完成兩種不相容型別轉換,需要用到強制型別轉換。
byte b; int i = 257; double d = 32.13; b = (byte) i; System.out.println("i and b = " + i + " " + b); i = (int)d; System.out.println("d and i = " + d + " " + i); b = (byte)d; System.out.println("d and b = " + d + " " + b); byte e=(byte)130; System.out.println(e); /* * output i and b = 257 1 d and i = 32.13 32 d and b = 32.13 32 -126 */
short s = 1;
s= s + 1;//編譯錯誤
short s1 = 1;
s1 += 1;
//上述陷阱是s = s + 1,s + 1會隱式轉換為int型,把int型號賦給short,會造成型別缺失。而s1 += 1相當於s1 = (short)(s1 + 1)會把s1 + 1強制轉換為short型別,就不會報錯。
- 包裝類之間轉換
包裝類之間不支援強制型別轉換,需要呼叫Integer.valueOf()、Integer.parseInt()等方法。
Tips: Integer.parseInt(String s)將會返回int常量。
Integer.valueOf(String s)將會返回Integer型別,如果存在快取將會返回快取中已有的物件。即:如果s字串對應的整數值在 -128~127之間,則解析出的Integer型別的物件是同一個物件;如果s字串對應的整數值不在-128~127之間,則解析出的Integer型別的 物件不是同一個物件。