java自動型別轉換與強制型別轉換
阿新 • • 發佈:2019-02-14
自動型別轉換就是自發的進行,你可以從輸出的結果看出,外表是看不出來的。我們知道資料型別有很多種,大小也不一樣,就像水桶似的,有1升的,2升的,4升的,自動型別轉換就相當於把小的水桶裡面的水裝到大的裡面去。比如
int a = 10;
double b = a;
輸出b是10.0;沒毛病,合情合理。a 的值是10(整型32位),將它的值賦給b(雙精度64位),1升桶裡的水倒進2升桶裡面,沒問題。其餘的float byte char ---只要是小範圍給大範圍,統統會隱式轉換,沒問題。
這裡說下char(字元型別)這個有點意思,上例子
byte b = 12;
char c = 'a';
b+c = 109;
驚不驚喜,意不意外!是這樣的,數字與char 型別運算時,char先轉換為ASCII等字元編碼表中有對應的數值,然後進行計算。char與自身運算時也是先轉換為ASCII等字元編碼表中有對應的數值。資料型別提升至int。
強制型別轉換就是明明自身不願意,你非要人家轉換。明明你想學習,你媽非讓你玩遊戲(不玩遊戲就打你),強制,絕對強制。(ps:是不是親生的--哈哈)
比如
double d = 10.9;
int a = d;報錯,絕對報錯,不報錯砍我---在預設情況下編譯器是不允許我們這樣做的,如果你就是想這樣轉換,也可以
int a = (int) d; 這樣就可以了,這就是強制轉換,把一個裝滿2升水的大桶倒進1升的桶裡面,很明顯多餘的水就灑出了,所以強制轉換會造成資料的丟失。
在說一說char 比如
long a = 4000000L;
char b = (char)a;
b = ? 如果強制轉換為char型別的話,會對照ASCII等字元編碼表 找出所對應的字元。
int a = 10;
double b = a;
輸出b是10.0;沒毛病,合情合理。a 的值是10(整型32位),將它的值賦給b(雙精度64位),1升桶裡的水倒進2升桶裡面,沒問題。其餘的float byte char ---只要是小範圍給大範圍,統統會隱式轉換,沒問題。
這裡說下char(字元型別)這個有點意思,上例子
byte b = 12;
char c = 'a';
b+c = 109;
驚不驚喜,意不意外!是這樣的,數字與char 型別運算時,char先轉換為ASCII等字元編碼表中有對應的數值,然後進行計算。char與自身運算時也是先轉換為ASCII等字元編碼表中有對應的數值。資料型別提升至int。
強制型別轉換就是明明自身不願意,你非要人家轉換。明明你想學習,你媽非讓你玩遊戲(不玩遊戲就打你),強制,絕對強制。(ps:是不是親生的--哈哈)
比如
double d = 10.9;
int a = d;報錯,絕對報錯,不報錯砍我---在預設情況下編譯器是不允許我們這樣做的,如果你就是想這樣轉換,也可以
int a = (int) d; 這樣就可以了,這就是強制轉換,把一個裝滿2升水的大桶倒進1升的桶裡面,很明顯多餘的水就灑出了,所以強制轉換會造成資料的丟失。
在說一說char 比如
long a = 4000000L;
char b = (char)a;
b = ? 如果強制轉換為char型別的話,會對照ASCII等字元編碼表 找出所對應的字元。
最後說說字串。任何只要與字串String相加就會被String吃到肚子裡增加字串的長度。
知海匠庫java培訓課程體系研發團隊來自網易系大咖,設計合理,知識點完整,重點突出;課程與最新技術同步,對接一線網際網路前端掌握技能;教學以授課+專案實戰教學”相結合的方式,更加突出實操能力,貼合企業的急需人才方向。