Java四類八種基本數據類型


Java基本數據類型

基本類型,或者叫做內置類型,是Java中不同於類的特殊類型。

  • Java中定義了四類八種基本數據類型:

布爾型:boolean
字符型:char
整數型:byte,short,int,long
浮點數型:float,double

數據類型 關鍵字 在內存中占用字節數 取值范圍 默認值
布爾型 boolean 1 true,false false
字符型 char 2 0~2^16-1 '\u0000'
字節型 byte 1 -128~127 0
短整型 short 2 -215~215-1 0
整型 int 4 -231~231-1 0
長整型 long 8 -263~263-1 0
單精度浮點型 float 4 1.4013E-45~ 3.4028E+38 0.0F
雙精度浮點型 double 8 4.9E-324~1.7977E+308 0.0D

Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的“E+數字”表示E之前的數字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

實例:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        // byte
        System.out.println("基本類型:byte 二進制位數:" + Byte.SIZE);
        System.out.println("包裝類:java.lang.Byte");
        System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
        System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
        System.out.println();

        // short
        System.out.println("基本類型:short 二進制位數:" + Short.SIZE);
        System.out.println("包裝類:java.lang.Short");
        System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
        System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
        System.out.println();

        // int
        System.out.println("基本類型:int 二進制位數:" + Integer.SIZE);
        System.out.println("包裝類:java.lang.Integer");
        System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
        System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
        System.out.println();

        // long
        System.out.println("基本類型:long 二進制位數:" + Long.SIZE);
        System.out.println("包裝類:java.lang.Long");
        System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
        System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
        System.out.println();

        // float
        System.out.println("基本類型:float 二進制位數:" + Float.SIZE);
        System.out.println("包裝類:java.lang.Float");
        System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
        System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
        System.out.println();

        // double
        System.out.println("基本類型:double 二進制位數:" + Double.SIZE);
        System.out.println("包裝類:java.lang.Double");
        System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
        System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
        System.out.println();

        // char
        System.out.println("基本類型:char 二進制位數:" + Character.SIZE);
        System.out.println("包裝類:java.lang.Character");
        // 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制台
        System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);
        // 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制台
        System.out.println("最大值:Character.MAX_VALUE="+ (int) Character.MAX_VALUE);

    }

}

結果:

基本類型:byte 二進制位數:8
包裝類:java.lang.Byte
最小值:Byte.MIN_VALUE=-128
最大值:Byte.MAX_VALUE=127

基本類型:short 二進制位數:16
包裝類:java.lang.Short
最小值:Short.MIN_VALUE=-32768
最大值:Short.MAX_VALUE=32767

基本類型:int 二進制位數:32
包裝類:java.lang.Integer
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647

基本類型:long 二進制位數:64
包裝類:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808
最大值:Long.MAX_VALUE=9223372036854775807

基本類型:float 二進制位數:32
包裝類:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45
最大值:Float.MAX_VALUE=3.4028235E38

基本類型:double 二進制位數:64
包裝類:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324
最大值:Double.MAX_VALUE=1.7976931348623157E308

基本類型:char 二進制位數:16
包裝類:java.lang.Character
最小值:Character.MIN_VALUE=0
最大值:Character.MAX_VALUE=65535
  • 裝箱和拆箱
    自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成Double,等等。反之就是自動拆箱。
    原始類型:boolean,char,byte,short,int,long,float,double
    封裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

  • 基本類型之間的轉換
      將一種類型的值賦值給另一種類型是很常見的。在Java中,boolean類型與其他7種類型的數據都不能進行轉換,這一點很明確。但對於其他7種數據類型,它們之間都可以進行轉換,只是可能會存在精度損失或其他一些變化。
      轉換分為自動轉換與強制轉換:
        自動轉換(隱式):無需任何操作。
        強制轉換(顯示):需使用轉換操作符(type)。

將6種數據類型按下面順序排列一下:
double>float>long>int>short>byte
如果從小轉換到大,那么可以直接轉換,而從大到小,或char和其他6種數據類型轉換,則必須使用強制轉換。

1、自動轉換(JVM自動完成)
  自動轉換時發生擴寬。因為較大的類型(如int)要保存較小的類型(如byte),內存總是足夠的,不需要強制轉換。如果將字面值保存到byte、short、char、long的時候,也會自動進行類型轉換。注意區別,此時從int(沒有帶L的整型字面值為int)到byte/short/char也是自動完成的,雖然它們都比int小。在自動類型轉化中,除了以下幾種情況可能會導致精度損失以外,其他的轉換都不能出現精度丟失。
> int --> float
> long--> float
> long--> double
> float-->double without strictfp
除了可能的精度值損失外,自動轉化不會出現任何運行時(run-time)異常

2、強制轉換
  如果要把大的轉成小的,或者在short與char之間進行轉換,就必須強制轉換,也被稱作縮小轉換,因為必須顯示地數值更小以適應目標類型。強制轉換采用轉換操作符()。嚴格地說, 將byte轉為char不屬於narrowing conversion) ,因為從byte到char的過程其實是byte-->int-->char,所以widening和narrowing都有。強制轉換除了可能的精度損失外,還可能使模發生變化。強制轉換格式如下:

(target-type) value;
  如果整數的值超出了type所能表示的范圍,結果將對byte類型的范圍取余數。例如a=256超出了byte的[-128,127]的范圍,所以將257除以byte的范圍(256)取余數得到b=1;需要注意的是,當a=200時,此時除了256取余數應該為-56,而不是200.
  將浮點類型賦給整數類型的時候,會發生截尾,也就是把小數的部分去掉。此時如果整數超出目標類型范圍,一樣將對目標類型的范圍取余數。
  不同類型的變量在相互賦值時,什么情況下需要進行強制類型轉換?
  范圍大的->范圍小、長->短、子類—>父類

  • 賦值及表達式中的類型轉換
    字面值賦值
    在使用字面值對整數賦值的過程中,可以將int litera賦值給byte short char int,只要不超出范圍。這個過程的類型轉換時自動完成的,但是如果你試圖將long litera賦給byte,即使沒有超出范圍,也必須進行強制類型轉換。
    表達式中的自動類型提升
    除了賦值以外,表達式計算過程中也可能發生一些類型轉換。在表達式中,類型提升規則如下:
    所有byte/short/char都被提升為int。
    如果有一個操作數為long,整個表達式提升為long。float和double情況也一樣

  • 擴展知識點
      Java是面向對象語言,其概念為一切皆為對象,但基本數據類型算是個例外哦,基本數據類型大多是面向機器底層的類型,它是 “值” 而不是一個對象,它存放於“棧”中而不是存放於“堆”中,但Java一切皆為對象的概念不是說說而已,它為每一個基本數據類型都做了相應的包裝類,包裝類就是一個對象,它存放於“堆”中。
      在棧中可以直接分配內存的數據是基本數據類型。
      引用數據類型:是數據的引用在棧中,但是他的對象在堆中。
      java中默認的整數類型是int類型,如果要定義為float型,則要在數值后加上l或L;
      默認的浮點型也是雙精度浮點,如果要定義為float型,則要在數值后加上f或F。
      一個英文字母或一個阿拉伯數字就是一個字符,占用一個字節
      一個漢字就是兩個字符,占用兩個字節。
      一個字節等於8位,一個字節等於256個數,就是-128到127一共256。
      kB就是kBytes
      Bytes就是“字節”的意思!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM