定義一個(gè)整型變量:
- public class TestDemo{
public static void main (String args[]){
//10是一個(gè)整數(shù),不會(huì)改變的數(shù),是常量
//程序之中任何一個(gè)整數(shù)對(duì)應(yīng)的類型都是int
int num = 10;聲明一個(gè)int型變量
//num是int型變量,2是一個(gè)int型的常量=結(jié)果還是int型
System.out.println(num2);
}
}
在進(jìn)行整型數(shù)據(jù)的操作過(guò)程當(dāng)中也會(huì)存在一個(gè)數(shù)據(jù)的溢出問(wèn)題
- 溢出:當(dāng)已經(jīng)達(dá)到整型的最大或最小值而繼續(xù)進(jìn)行數(shù)學(xué)計(jì)算而可能產(chǎn)生的錯(cuò)誤數(shù)據(jù)。
- 關(guān)于變量的命名要求,第一個(gè)單詞的字母小寫,而后的每一個(gè)單詞首字母大寫。
范例:觀察數(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ù)同樣會(huì)溢出,變成最大值/
System.out.println(minValue - 2);//-2147483648//如果是最小值減2
發(fā)現(xiàn)當(dāng)已經(jīng)超出了數(shù)據(jù)的操作類型,就會(huì)產(chǎn)生數(shù)據(jù)的偏差,最好的方法就是在計(jì)算之前預(yù)估數(shù)據(jù)的大小。
- 解決數(shù)據(jù)溢出的方法:
- 更換更大的數(shù)據(jù)類型
范例:解決int的數(shù)據(jù)溢出問(wèn)題,比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);
}
} - 在使用此類方式的處理之前,一定要注意一個(gè)問(wèn)題,所有的程序的執(zhí)行順序都是從“=”的右邊到左邊。如果繼續(xù)使用了int來(lái)計(jì)算,那么計(jì)算結(jié)果,那么計(jì)算結(jié)果還是存在一個(gè)溢出問(wèn)題。
實(shí)現(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類型/
}
} - 實(shí)現(xiàn)方式二:直接將一個(gè)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;//將一個(gè)變量先定義成long型
System.out.println( result );/result是long類型,+1是int類型=long類型/ - 數(shù)據(jù)類型可以由小變大解決數(shù)據(jù)溢出問(wèn)題;數(shù)據(jù)類型除了可以由小變大之外,還可以實(shí)現(xiàn)由大變小。但是這就需要強(qiáng)制完成,強(qiáng)制完成的結(jié)果就是:丟數(shù)據(jù)
- public class TestDemo{
public static void main (String args[]){
/任何的整數(shù)默認(rèn)類型都是int,但是該數(shù)據(jù)已經(jīng)超過(guò)了int可以保存的數(shù)據(jù)范圍/
//那么我們就需要把這個(gè)數(shù)據(jù)明確的表示成一個(gè)long型的常量
long num = 2147483648L;//“L"或“l(fā)”都可以
int result = (int)num;/強(qiáng)制long類型變?yōu)閕nt類型,這種操作有可能會(huì)丟失精度/
System.out.println(result);
}
} - 范圍小的數(shù)據(jù)類型可以自動(dòng)變?yōu)閿?shù)據(jù)大的類型
- 范圍大的數(shù)據(jù)類型必須強(qiáng)制變?yōu)閿?shù)據(jù)小的類型
- 關(guān)于數(shù)據(jù)類型默認(rèn)值問(wèn)題:
任何的數(shù)據(jù)類型都有默認(rèn)值,但是這個(gè)默認(rèn)值在方法的聲明中無(wú)效。
錯(cuò)誤程序:
public class TestDemo{
public static void main (String args[]){
int num;
System.out.println(num);//錯(cuò)誤:可能尚未初始化
那么這個(gè)時(shí)候有兩種解決方案: - 在使用前為變量賦值,
public class TestDemo{
public static void main (String args[]){
int num;
num = 10;//在輸出前為num賦值
System.out.println(num);//輸出結(jié)果10
但是這種形式在老版本的JDK中也會(huì)出錯(cuò)。
- 在變量聲明時(shí)賦值
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的范圍,那么理論上要進(jìn)行強(qiáng)制轉(zhuǎn)換
//可是這里沒(méi)有進(jìn)行轉(zhuǎn)換,因?yàn)槠鋽?shù)據(jù)量符合byte的要求。
byte data = 10;
System.out.println(data);
如果說(shuō)為byte賦值的內(nèi)容大于byte的范圍,這個(gè)時(shí)候就要進(jìn)行強(qiáng)制轉(zhuǎn)換。同時(shí)需要注意的是,如果要將int常量直接賦值給byte的變量,那么只能夠是常量,而不能是int變量。