概念:Java中,經常可以遇到類型轉換的場景,從變量的定義到復制、數值變量的計算到方法的參數傳遞、基類與派生類間的造型等,隨處可見類型轉換的身影。Java中的類型轉換在Java編碼中具有重要的作用。
首先,來了解下數據類型的基本理解:數據是用來描述數據的種類,包括其值和基於其值基礎上的可進行的操作集合。
Java中數據類型主要分為兩大類:基本數據類型和引用數據類型。
基本數據類型共有8種,分別是:布爾型boolean, 字符型char和數值型byte/short/int/long/float/double。由於字符型char所表示的單個字符與Ascii碼中相應整形對應,因此,有時也將其划分到數值型中。引用類型具體可分為:數組、類和接口。因此,本文中Java類型轉換的總結也將分為基本數據類型和引用數據類型兩個方面展開。
自動轉換
大小排列:byte----->shorrt----->int----->long----->float----->double類型依次從小到大排列
整形,實形,字符類型數據可以混合運算,運算中,不同類型的數據先轉化為同類型,然后進行運算,轉換從低級到高級,轉換前於轉換后的數據類型如下

我們來做一個自動轉換的案列
char類型能不能轉換為int類型呢?
1 package pkg1; 2 3 public class Test1{ 4 public static void main(String args[]){ 5 //定義一個char類型,字符和int類型可以自動轉換 6 char c = 'a'; 7 int i = c ; 8 9 System.out.println(i); 10 11 } 12 }
邊緣看運行效果:

可以看到char是可以自當轉換成int類型的,但是輸出的結果卻是97,其實字符和整數有一種對應關系那就是ASCII表

看看剛剛我們得出的小a對應的數字就是97.
如果兩個int類型計算會不會自動提升類型。
1 package pkg1; 2 3 public class Test1{ 4 public static void main(String args[]){ 5 6 //如果兩個int類型計算會不會自動提升類型 7 int a = 2147483647; 8 int b = 12; 9 10 11 int d = a + b; 12 System.out.println(d); 13 } 14 }
可以看到編譯不報錯,但是結果,是為負數,這表示數字已經超過了int類型的長度,但並不會自動轉換

總結:int,long,float,double自身來計算的時候沒有類型的提升,如果超出范圍了就會出現精度的損失 。
int類型和float類型的計算轉換成float
1 package pkg1; 2 3 public class Test1{ 4 public static void main(String args[]){ 5 6 //int類型和float類型的計算轉換成float 7 float f = 1.4f; 8 int y = 1 ; 9 int f1 = f + y ; 10 11 System.out.println(f1); 12 13 } 14 }
最后用int類型接收,編譯是不成功的 ,在轉換時一定要向大的類型轉換才可以。所以一定要是float類型


問題一:

是可以的,因為小數的常量默認值是double類型的
問題二:

可以,為什么呢?
12.5f是表示float類型的常量,它是占4個字節,double類型占8個, 就好比大魚吃小魚一樣,可以將小的吃掉。這個類型也是一樣的。
總結:小的表數范圍是常量或者變量可以自動的向大的表數范圍的類型轉換,包括int類型向double類型轉換一樣。大的表述范圍的值不能自動的賦值小的表述范圍的變量。
