雖然有這麼多的問題涉及到這個主題,但總覺得我不知道或說我不滿意這些答案,所以我在這裏發佈再次變量的靜態,動態,弱,強類型
Integer in=new Integer(4);
Character character=(Character) in; //Cannot cast from Integer to Character
String s="hello";
int j=(int) s;//Cannot Cast from string to int
char chi='a';
int l=(int)chi; //works
int i=0;
char ch=(char)i; //works
String b=(String)1+"hello";//cannot cast from int to string
在第二
,第4和第9行它讓我看到評論錯誤,而我可以在它被註釋掉工程線路使INT和焦炭之間的轉換。
所以在我發佈的代碼中,編譯器檢查靜態/動態行爲以及檢查弱/強行爲的位置。
我相信這些問題肯定會有這麼多答案可用,所以如果可以的話發佈鏈接,否則詳細的解釋將非常可觀。
是什麼讓我困惑
- 一些如何靜態/動態和強/弱的外表一樣給我
- 如何編譯器知道何時檢查靜態/動態類型和時檢查強/弱類型
- 這兩種類型檢查系統的必要性是什麼。
'char'和'int'都是數字原語,這就是爲什麼這是可行的,因爲'char'在內部被表示爲一個無符號的8位數字,就像將一個long賦給一個double類型 – Moira
實際上並不存在兩種類型檢查 - 只是一些固定的數值轉換,可能適用於某些情況。關於「編譯器如何知道」 - 呃,它知道,因爲語言規範包含非常明確的規則:[第5章轉換和上下文](https://docs.oracle.com/javase/specs/jls/ se8/html/jls-5.html) – Hulk
不能將對象轉換爲原始類型。 – Blasanka