java基本類型轉換規則
1、基本數據類型的轉換是指由系統根據轉換規則自動完成,不需要程序員明確地聲明不同數據類型之間的轉換。轉換在編譯器執行,而不是等到運行期再執行。
2、基本數據類型的轉換在賦值、方法調用和算術運算三種情況下都會發生。在進行方法調用時,數據類型指調用方法向被調用方法傳遞參數,即實參和型參類型不一致,從而發生了類型轉換。
3、賦值和方法調用的基本數據類型轉換規則一樣。合法的基本類型轉換原則是指從取值范圍窄的類型向取值范圍寬的類型轉換,如果是從取值范圍寬的類型向取值范圍窄的類型轉換,則會產生編譯錯誤。
4、具體規則:
(1)布爾型和其它基本數據類型之間不能相互轉換;
(2)byte型可以轉換為short、int、、long、float和double;
(3)short可轉換為int、long、float和double;
(4)char可轉換為int、long、float和double;
(5)int可轉換為long、float和double;
(6)long可轉換為float和double;
(7)float可轉換為double;
也就是說,只能有取值窄的范圍向寬范圍轉換,反之則不行。
5、Java中無后綴數字型,文字型共有兩種默認類型,無小數點的整數型文字值、默認類型為整型int,帶有小數點的浮點數型文字值,默認類型為雙精度double。
6、在賦值語句中,默認類型為整型的無小數點整數型文字值作為右操作數時,可以賦值給取值范圍比整型小的變量,前提是文字值對於的實際數值在變量類型的取值范圍內。而默認類型為雙精度的帶有小數點的浮點數型文字值只能賦值給雙精度型變量,不能賦值給單精度型變量。
7、基本數據類型的轉換在算術運算情況下,正對單操作數運算符和雙操作數運算符的轉換規則是不一樣的。
但操作數運算符算術運算時基本轉換規則如下:
(1)當運算符為取正運算符(+)。取負運算符(-)或按位取反運算符(~)時,如果操作數為byte、char或short,則先被轉換為int,再參與運算。
(2)當運算符為自動遞增運算符(++)或自動遞減運算符(--)時,如果操作數為byte,short或char,則不用先被轉換為int,而是直接參與算術運算,且運算結果類型也不變。
(3)如果操作數為int或long,則無論運算符為何種單操作數運算符,均不發生類型轉換,且運算結果類型也不變。
雙操作數運算符算術運算時基本轉換規則如下:
(1)如操作數之一為double,則另一個操作數先被轉化為double,再參與算術運算。
(2)如兩操作數均不為double,當操作數之一為float,則另一操作數先被轉換為float,再參與運算。
(3)如兩操作數均不為double或float,當操作數之一為long,、則另一操作數先被轉換為long,再參與算術運算。
(4)如兩操作數均不為double、float或long,則兩操作數先被轉換為int,再參與運算。
(5)如采用+=、*=等縮略形式的運算符,系統會自動強制將運算結果轉換為目標變量的類型。
2、基本數據類型的轉換在賦值、方法調用和算術運算三種情況下都會發生。在進行方法調用時,數據類型指調用方法向被調用方法傳遞參數,即實參和型參類型不一致,從而發生了類型轉換。
3、賦值和方法調用的基本數據類型轉換規則一樣。合法的基本類型轉換原則是指從取值范圍窄的類型向取值范圍寬的類型轉換,如果是從取值范圍寬的類型向取值范圍窄的類型轉換,則會產生編譯錯誤。
4、具體規則:
(1)布爾型和其它基本數據類型之間不能相互轉換;
(2)byte型可以轉換為short、int、、long、float和double;
(3)short可轉換為int、long、float和double;
(4)char可轉換為int、long、float和double;
(5)int可轉換為long、float和double;
(6)long可轉換為float和double;
(7)float可轉換為double;
也就是說,只能有取值窄的范圍向寬范圍轉換,反之則不行。
5、Java中無后綴數字型,文字型共有兩種默認類型,無小數點的整數型文字值、默認類型為整型int,帶有小數點的浮點數型文字值,默認類型為雙精度double。
6、在賦值語句中,默認類型為整型的無小數點整數型文字值作為右操作數時,可以賦值給取值范圍比整型小的變量,前提是文字值對於的實際數值在變量類型的取值范圍內。而默認類型為雙精度的帶有小數點的浮點數型文字值只能賦值給雙精度型變量,不能賦值給單精度型變量。
7、基本數據類型的轉換在算術運算情況下,正對單操作數運算符和雙操作數運算符的轉換規則是不一樣的。
但操作數運算符算術運算時基本轉換規則如下:
(1)當運算符為取正運算符(+)。取負運算符(-)或按位取反運算符(~)時,如果操作數為byte、char或short,則先被轉換為int,再參與運算。
(2)當運算符為自動遞增運算符(++)或自動遞減運算符(--)時,如果操作數為byte,short或char,則不用先被轉換為int,而是直接參與算術運算,且運算結果類型也不變。
(3)如果操作數為int或long,則無論運算符為何種單操作數運算符,均不發生類型轉換,且運算結果類型也不變。
雙操作數運算符算術運算時基本轉換規則如下:
(1)如操作數之一為double,則另一個操作數先被轉化為double,再參與算術運算。
(2)如兩操作數均不為double,當操作數之一為float,則另一操作數先被轉換為float,再參與運算。
(3)如兩操作數均不為double或float,當操作數之一為long,、則另一操作數先被轉換為long,再參與算術運算。
(4)如兩操作數均不為double、float或long,則兩操作數先被轉換為int,再參與運算。
(5)如采用+=、*=等縮略形式的運算符,系統會自動強制將運算結果轉換為目標變量的類型。