Java基本語法-----java數據類型的轉換
前言
Java中可以進行不同數據類型的加減乘除運算嗎?是可以的。在算術運算符中已經體驗過如果兩個整數(int)相除會去掉小數部分。如果需要保留小數部分,可以讓除數或者被除數變為double類型的(5變為5.0)。其實Java是自動的將int的那個數變為了double類型了也就是Java自動的將整數變為了浮點數。例如5/2.0 其實是5.0/2.0。
1、自動類型轉換(也叫隱式類型轉換)
可以將一個數賦值給更大數值範圍的變量,例如可以經byte
變量賦值給short變量可以將short變量賦值給int變量可以將int變量賦值給long變量。
Java內部其實做了工作就是自動將數值進行了類型提升,就叫做自動類型轉換(也叫隱式類型轉換)
byte b = 1; //00000001
自動類型轉換(也叫隱式類型轉換)
要實現自動類型的轉換,需要滿足兩個條件,第一兩種類型彼此兼容,第二目標類型取
值範圍必須大於源類型。所有的數字類型,包括整形和浮點型彼此都可以進行轉換。
例如:
byte b=100; int x=b;
如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵有大量的學習資料可以下載。
2、強製類型轉換(也叫顯式類型轉換)
不可以將一個數值賦給範圍更小數值範圍的變量,除非進行類型轉換。
byte b = 100;
上述例子發生了什麼,發生了類型轉換。 b+2 遇到了加法運算,2默認是int類型,byte類型b變量存儲的值自動類型提升為
了int類型。執行完加法運算後的結果就是int類型,想要將int的類型值放入到byte類型變量b中,無法放入,編譯報錯。
byte b=1;
當兩種類型彼此不兼容,或者目標類型取值範圍小於源類型(目標是byte源是int) 無法自動轉換,此時就需要進行強製類型轉換。
強製類型轉換需要注意:
損失精度!!!
int a=128; byte b=(byte)a;
int
|00000000 | 00000000 | 00000000 | 10000000 |
再次分析此行代碼
byte b = 100;
編譯:提示如下錯誤。
3、類型轉換的原理
可以把byte 理解為1兩的碗,short 2兩的碗,int 4兩的碗,long 8兩的碗。1兩碗的滿碗酒可以倒入 2兩 4兩 8兩的碗中。 但是 4兩碗的酒倒入1兩碗的酒就有一些問題。( 別暈 仔細閱讀 多思考)
1、什麼時候要用強製類型轉換
比如小數部分隻想保留整數部分. 一定要清楚要轉換的數據在轉換後數據的範圍內否則會損失精度.
public static void main(String[] args) { byte b = 100;
2、表達式的數據類型自動提升
算術表達式,邏輯表達式 所有的byte型、short型和char的值將被提升到int型。
如果一個操作數是long型,計算結果就是long型; 如果一個操作數是float型,計算結果就是float型;
如果一個操作數是double型,計算結果就是double型。
分析 System.out.println(‘a’+1)結果? 自動類型提升
byte b = 3; int x = 4;
強製類型轉換
byte b = 2; /*
思考1
byte b=126;11既然數據默認的有數據類型,那麼126 默認是int類型的,為什麼存儲到byte類型時不會報錯呢。
126 是常量java在編譯時期會檢查該常量(每個常量)是否超出byte類型的範圍。如果沒有可以賦值。
思考2
byte b=128;
能否正常的編譯和運行。
該語句會出現編譯錯誤,128超出了byte變量的存儲範圍,所以出現編譯錯誤。
思考3
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪一句編譯失敗?為什麼?
b =3+4, 3和4都是常量,所以java在編譯時期會檢查該常量(每個常量)是否超出byte類型的範圍。如果沒有可以賦值。例如b=128+1 就無法編譯通過。b=127+1;也是無法通過。
b =b1+b2 不可以,因為b1 和b2 是變量,表達式求值時,變量值會自動提升為int型,表達式結果也就成了int型,這是要賦值給byte型的b,必須進行強製類型轉換了。
補充
System.out.println(‘a’+1)結果
美國人為了讓計算機識別他們生活中的文字,讓二進製表示生活中的文字.所以一個字母代表了一個二進製.,二進製也有十進製的表現形式.,把生活中的字母都用數字來標識,例如97代表a ,98 代表 b。打印’a’就把a作為輸出顯示,沒有疑問。但是 ‘a’+1 有加號涉及到了運算。根據java自動類型提升規則,同樣道理 char 提升為int 。就把’a’代表的數字體現了出來。a 表示的是97 ,97+1就是98; 那麼 想要查看98 表示的char 是什麼 怎麼實現呢 ?就要用到剛才介紹的強製類型轉換了
System.out.println(char(‘a’+1));
就取到了98 在ASCII碼表中表示的字符。大寫A 和小寫a 在 ASCII有不同的表現。還有一個概念字符’1’ 在ASCII中 不是數字 1,可以運行代碼查看,到此就可以明白了char 類型,char類型也是可以參與運算的,為什麼可以參與運算呢。因為字符在ASCII表中都有對應的數字體現。所有的計算機兼容ASCII。
System.out.println('a'+1); //98
補充問題:
int i='a'+'b';
總結:
所有數值運算符都可以用在char型數據上,如果另一個操作數是一個數字或者字符,那麼char會自動提升為int型,如果另一個操作數是字符串,那麼字符就會和字符串相連。
最後更新:2017-05-03 12:30:39