JAVA這幾種數據類型,可否串門?入了人家門,就得按人家規矩來,入鄉隨俗哦,不免發生有自覺的 還有不情願被動的。測試
自動類型轉換:容量小的數據類型能夠自動轉換爲容量大的數據類型。在圖中,黑色的實線表示無數據丟失的自動類型轉換,而紅色的虛線表示在轉換時可能會精度的損失。spa
特例: 能夠將整型常量直接賦值給byte, short, char等類型變量,而不須要進行強制類型轉換,只要不超出其表數範圍code
Short b = 12; //合法 short b = 1234567; //非法
強制類型轉換,又被稱爲造型,用於顯式的轉換一個數值的類型. 在有可能丟失信息的狀況下進行的轉換是經過造型來完成的,但可能形成精度下降或溢出。對象
強制類型轉換的語法格式:「(type)var」,運算符「()」中的type表示將值var想要轉換成的目標數據類型。blog
double x = 3.14; int nx = (int)x; //值爲3 char c = 'a'; int d = c+1; System.out.println(d); System.out.println((char)d);
當將一種類型強制轉換成另外一種類型,而又超出了目標類型的表示範圍,就會被截斷成爲一個徹底不一樣的值。ast
int x = 300; byte bx = (byte)x; //值爲44
不能在布爾類型和任何數值類型之間作強制類型轉換。class
若是須要把布爾類型轉換成一個數字該怎麼辦呢?變量
1.操做比較大的數時,要留意是否溢出,尤爲是整數操做時。數據類型
int money = 1000000000; //10億 int years = 20; int total = money*years; //返回的是負數 long total1 = money*years; //返回的仍然是負數。默認是int,所以結果會轉成int值,再轉成long。可是已經發生了數據丟失 long total2 = money*((long)years); //先將一個因子變成long,整個表達式發生提高。所有用long來計算。
2. 眼神很差使用L和l 注意哦,別和1混淆了(不要命名名字爲l的變量,long類型使用大寫L不要用小寫)語法
int l = 2; long a = 23451l; System.out.println(l+1);
代碼
//測試自動轉型和強制轉型 public class TestCast { public static void main(String[] args){ byte b = 123; byte b2 = 300; char c = -3; char c2 = 'a'; int i = c2; long d01 = 123213; float f = d01; //測試強制轉型 int i2 = -100; char c3 = (char)i2; //-100超過char的表數範圍,因此轉換成徹底不一樣的值,無心義的值! System.out.println(c3); //表達式中的類型提高問題 int a = 3; long b = 4; double d = 5.3; int c = (int)(a+b); //作全部的二元運算符(+-/*%),都會有類型提高的問題! float f = (float)(a + d); int money = 1000000000; //10億 int years = 20; long total = (long)money*years; //返回的是負數 System.out.println(total); //一我的70年心跳多少次 long times = 70L*60*24*365*70; System.out.println(times); } }
固然以上都是皮毛,其實萬事皆可盤,那麼類型轉換呢,什麼對象均可以去嘗試轉換,這之後說哦