定義一個整型變量:
- public class TestDemo{
public static void main (String args[]){
//10是一個整數(shù)睛挚,不會改變的數(shù)署穗,是常量
//程序之中任何一個整數(shù)對應(yīng)的類型都是int
int num = 10;聲明一個int型變量
//num是int型變量,2是一個int型的常量=結(jié)果還是int型
System.out.println(num2);
}
}
在進行整型數(shù)據(jù)的操作過程當中也會存在一個數(shù)據(jù)的溢出問題
- 溢出:當已經(jīng)達到整型的最大或最小值而繼續(xù)進行數(shù)學計算而可能產(chǎn)生的錯誤數(shù)據(jù)缚窿。
- 關(guān)于變量的命名要求汗茄,第一個單詞的字母小寫炊苫,而后的每一個單詞首字母大寫谊却。
范例:觀察數(shù)據(jù)溢出操作 - public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
System.out.println(maxValue);//2147483647
System.out.println(minValue);//-2147483648
//maxValue屬于int型變量 + int型=int型(如果再加上下面的輸出)
System.out.println(maxValue + 1);/maxValue已經(jīng)是最大值了衙猪,所以數(shù)據(jù)溢出(最小值)/
System.out.println(minValue - 1 );//-2147483648/同樣的馍乙,minValue已經(jīng)是最小值了,數(shù)據(jù)同樣會溢出垫释,變成最大值/
System.out.println(minValue - 2);//-2147483648//如果是最小值減2
發(fā)現(xiàn)當已經(jīng)超出了數(shù)據(jù)的操作類型丝格,就會產(chǎn)生數(shù)據(jù)的偏差,最好的方法就是在計算之前預估數(shù)據(jù)的大小棵譬。
- 解決數(shù)據(jù)溢出的方法:
- 更換更大的數(shù)據(jù)類型
范例:解決int的數(shù)據(jù)溢出問題显蝌,比int大的數(shù)據(jù)類型,long
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result = maxValue + 1;
System.out.println( result);
}
} - 在使用此類方式的處理之前订咸,一定要注意一個問題曼尊,所有的程序的執(zhí)行順序都是從“=”的右邊到左邊扭屁。如果繼續(xù)使用了int來計算,那么計算結(jié)果涩禀,那么計算結(jié)果還是存在一個溢出問題。
實現(xiàn)方式一:直接把int變量的內(nèi)容直接賦值給long
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result = maxValue ;//直接把int變量的內(nèi)容賦值給long
System.out.println( result +1 );/result是long類型然眼,+1是int類型=long類型/
}
} - 實現(xiàn)方式二:直接將一個int型的變量變?yōu)閘ong型
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result =(long)maxValue +1;//將一個變量先定義成long型
System.out.println( result );/result是long類型艾船,+1是int類型=long類型/ - 數(shù)據(jù)類型可以由小變大解決數(shù)據(jù)溢出問題;數(shù)據(jù)類型除了可以由小變大之外高每,還可以實現(xiàn)由大變小屿岂。但是這就需要強制完成,強制完成的結(jié)果就是:丟數(shù)據(jù)
- public class TestDemo{
public static void main (String args[]){
/任何的整數(shù)默認類型都是int鲸匿,但是該數(shù)據(jù)已經(jīng)超過了int可以保存的數(shù)據(jù)范圍/
//那么我們就需要把這個數(shù)據(jù)明確的表示成一個long型的常量
long num = 2147483648L;//“L"或“l(fā)”都可以
int result = (int)num爷怀;/強制long類型變?yōu)閕nt類型,這種操作有可能會丟失精度/
System.out.println(result)带欢;
}
} - 范圍小的數(shù)據(jù)類型可以自動變?yōu)閿?shù)據(jù)大的類型
- 范圍大的數(shù)據(jù)類型必須強制變?yōu)閿?shù)據(jù)小的類型
- 關(guān)于數(shù)據(jù)類型默認值問題:
任何的數(shù)據(jù)類型都有默認值运授,但是這個默認值在方法的聲明中無效。
錯誤程序:
public class TestDemo{
public static void main (String args[]){
int num;
System.out.println(num);//錯誤:可能尚未初始化
那么這個時候有兩種解決方案: - 在使用前為變量賦值乔煞,
public class TestDemo{
public static void main (String args[]){
int num;
num = 10;//在輸出前為num賦值
System.out.println(num);//輸出結(jié)果10
但是這種形式在老版本的JDK中也會出錯吁朦。
- 在變量聲明時賦值
public class TestDemo{
public static void main (String args[]){
int num = 10;
System.out.println(num); - byte數(shù)據(jù)類型(-128-127)
范例:聲明byte變量
public class TestDemo{
public static void main (String args[]){
//10是int,int的范圍要大于byte的范圍渡贾,那么理論上要進行強制轉(zhuǎn)換
//可是這里沒有進行轉(zhuǎn)換逗宜,因為其數(shù)據(jù)量符合byte的要求。
byte data = 10;
System.out.println(data);
如果說為byte賦值的內(nèi)容大于byte的范圍空骚,這個時候就要進行強制轉(zhuǎn)換纺讲。同時需要注意的是,如果要將int常量直接賦值給byte的變量囤屹,那么只能夠是常量熬甚,而不能是int變量。