1、型別轉換主要在在 賦值、方法呼叫、算術運算 三種情況下發生。
a、賦值和方法呼叫 轉換規則:從低位型別到高位型別自動轉換;從高位型別到低位型別需要強制型別轉換:
(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;
b、算術運算 中的型別轉換:1 基本就是先轉換為高位資料型別,再參加運算,結果也是最高位的資料型別;2 byte short char運算會轉換為int;
(1)如運算元之一為double,則另乙個運算元先被轉化為double,再參與算術運算。
(2)如兩運算元均不為double,當運算元之一為float,則另一運算元先被轉換為float,再參與運算。
(3)如兩運算元均不為double或float,當運算元之一為long,、則另一運算元先被轉換為long,再參與算術運算。
(4)如兩運算元均不為double、float或long,則兩運算元先被轉換為int,再參與運算。
特殊:
(1)如採用+=、*=等縮略形式的運算子,系統會自動強制將運算結果轉換為目標變數的型別。
int num = integer.max_value ;
int num2 = integer.max_value ;
num += 2l ; //正確 += 將得到的強值轉換為了目標變數型別
num2 = num2 + 2l ; //會報錯 這樣相當於將地型別的賦值給了高型別 不會實現自動轉換
(2) 當運算子為自動遞增運算子(++)或自動遞減運算子(--)時,如果運算元為byte,short或char型別不發生改變;
1、基本型別 與 對應包裝類 可自動轉換,這是自動裝箱和折箱的原理;
integer c1 = new integer(1);
integer c2 = 2;
int cc = new integer(3);
//另:string 與 基本型別的互轉
int i = integer.parseint("13");
int ii = integer.valueof("12");
string s1 = string.valueof(123);
string s2 = integer.tostring(i);
string s3 = "" + i;
2、兩個引用型別間轉換:
1、子類能直接轉換為父類 或 介面型別;
2、父類轉換為子類要 強制型別轉換;且在執行時若實際不是對應的物件,會丟擲classcastexception執行時異常;
js資料型別轉換規則
數值型別 轉字串,直接轉成對應值的字串 轉布林,0 和 nan轉成false,其他值轉成true 在需要時會自動的轉成對應值的包裝物件 字串 空字串 轉數字為 0,轉布林為 false 非空純數字字串 123 轉數字為對應值的數值,轉布林 true 非空非數字字串 abc 轉數字為nan,轉布林是t...
java 中型別轉換規則
首先boolean不能跟其他型別轉換。1.賦值時 整數預設的是int 浮點預設是double,即整型等號右側全部自動轉化為int,浮點型等號右側自動轉換為double。當大容量的資料型別賦值給小容量的資料型別時 需要強制型別轉換但是有乙個特例 例 byte b1 3 是沒有錯誤的,因為等號右邊如果是...
Mysql 資料型別隱式轉換規則
今天遇到乙個慢查詢,查詢日誌找到慢查詢語句是這樣的 select from convert test where areacode 0001 and period 20170511 and period 20170511 convert test表結構如下 create table convert ...