自動類型轉換
容量小的數據類型可以自動轉換為容量大的數據類型
byte b = 123;//byte b2 = 300;//報錯,超過了byte最大值127//char c = -3;//報錯,char范圍是0~65536,不在范圍char c2 = 'a';//a在ascii碼里是98int i = c2;long d01 = 123213;float f = d01;
特例
可以將整型常量直接賦值給byte,short,char等類型變量,而不需要進行強制類型轉換,只要不超出其表數范圍
public static void main(String[] args){char a=100;//整型常量可以直接賦值int i=100;char b=i;//整型int變量不能直接賦值。錯誤: 不兼容的類型: 從int轉換到char可能會有損失。char c=(char)i;//正確}
強制類型轉換
用于顯示的轉換一個數值的類型。可能造成精度降低和溢出。
int i=100;char c=(char)i;//正確
注意!
當將一種類型強制轉換成另一種類型,而又超出了目標類型的表示范圍,就會被截斷成為一個完全不同的值。
int i=-100;
char b=(char)i;
System.out.println(b);
類型提升
做所有的二元運算符(+-/*%),都會有類型提升的問題!
int a = 3;long b = 4;double d = 5.3;//int c = a+b; //a+b 提升為了long類型,報錯。int c = (int)(a+b); //float f = a + d; //a+d 提升為了double類型,報錯。float f = (float)(a + d);
注意!
類型轉換中,如果超過了類型的表數范圍,則返回錯誤的值。如下例
int money = 1000000000; //10億int years = 20;long total = money*years; //返回的是負數 System.out.println(total);// -1474836480
正確的,提升類型
int money = 1000000000; //10億int years = 20;long total = (long)money*years; System.out.println(total);// 20000000000
上例是在運算前先把money的類型從int提升到long。
再來一例:
//一個人70年心跳多少次long times = 70*60*24*365*70;//返回負數System.out.println(times);//-1719527296
正確的方式,在第一個數轉為long類型
long times = 70L*60*24*365*70;
System.out.println(times);//2575440000
-------------
更多的Java,Angular,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,:
http://www.cnblogs.com/zengmiaogen/p/7083694.html