Java數(shù)據(jù)類型的劃分(整數(shù)類型)

定義一個(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(num
    2);
    }
    }

在進(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變量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,916評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    葉總韓閱讀 5,167評(píng)論 0 41
  • Win7下如何打開(kāi)DOS控制臺(tái)? a:開(kāi)始--所有程序--附件--命令提示符 b:開(kāi)始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,614評(píng)論 4 12
  • 1 順序語(yǔ)句 語(yǔ)句:使用分號(hào)分隔的代碼稱作為一個(gè)語(yǔ)句。 注意:沒(méi)有寫任何代碼只是一個(gè)分號(hào)的時(shí)候,也是一條語(yǔ)句,...
    哈哈哎呦喂閱讀 413評(píng)論 0 0