Java--型別轉換
Java是強型別語言,所以要進行有些運算的時候需要型別轉換,java在做運算的時候需要將不同型別的資料轉換成同一型別進行計算。
Java資料型別的轉換有兩種形式:
1,強制型別轉換:
2,自動型別轉換:
什麼是強型別轉換和自動型別轉換?上一篇中已經介紹的資料型別,其實資料型別是由優先順序的。優先順序的高低也就決定了你要做的型別轉換是強制型別轉換還是自動型別轉換。
(低)---------------------------------------------------------->(高)
byte,short,char-->int --->long--->float--->double
優先順序有低到高轉換為自動型別轉換,有高到低轉換為強制型別轉換
下面我們就據一些例子:
有高到低之間的轉換:int---->byte
有低到高之間的轉換:byte---->int
public class MyJava { public static void main(String[] args) { //有高到底轉換 int a=1; byte b=(byte) a; //有低到高轉換 byte c=10; int d=c; //輸出 System.out.println(b); System.out.println(d); } }
上面的程式看上去好像沒有上面問題,但是在進行強轉換型別的時候,不明白的人可能會踩坑。接下來我將上面的程式稍作修改,執行後你就能看到結果了。
public class MyJava { public static void main(String[] args) { //有高到底轉換 int a=128; byte b=(byte) a; //有低到高轉換 byte c=10; int d=c; //輸出 System.out.println(b); System.out.println(d); } }
這是什麼鬼?為什麼經過強型別轉換後128變成了-128呢?其實上一篇在介紹資料型別的時候就已經給出答案:
看到byte範圍了沒有?最大到127,而我給int型別賦的值是128超出了他的範圍,所以經過強制型別轉換後兩個數值不一樣了。我們通常把這成為記憶體溢位。
我們在接著做型別轉換的測試:
public class MyJava {
public static void main(String[] args) {
float a=20.1f;
int b=(int)a;
double c=3.1415926;
int d=(int) c;
//輸出
System.out.println(b);
System.out.println(d);
}
}
上面的兩次轉換都是自動型別轉換,但是我們會發現前後轉換數值也不相等,這又是什麼原因呢?不用想了,一個是float和double都是表示小數的,而int型別是整數型肯定不能帶小數。所以進行轉換的時候只能去掉小數點後面的部分直接取整了。這種情況我們一般稱為精度問題了。
接下來我們接著做資料型別轉換的測試:
public class MyJava { public static void main(String[] args) { char a='a'; int b=a+1; //輸出 System.out.println(b); } }
???為什麼變成98了,什麼鬼?其實就是ASCII碼,不瞭解的可以百度科普一下就行了。a的ASCII碼是97,那麼在加上1自然就是98了。
接下來就是布林值了,注意:不能對布林值進行轉換,因為布林值只有兩種結果,true和false。
關於資料型別轉換經過測試,我們應該可以總結出關於資料型別轉化的注意要點了:
1,不能把物件型別轉換為不相干的型別。(型別之間的轉換一定是同一性質的。就好比人永遠轉換不成豬,但是男和女可以轉換。哈哈哈)
2,把高容量轉換成低容量的時候強制轉換。
3,轉換的時候可能存在記憶體溢位和精度問題。