6. Java基本數據類型

Java 基本數據類型

變量就是申請內存來存儲值。也就是說,當建立變量的時候,須要在內存中申請空間。java

內存管理系統根據變量的類型爲變量分配存儲空間,分配的空間只能用來儲存該類型數據。數組

所以,經過定義不一樣類型的變量,能夠在內存中儲存整數、小數或者字符。post

Java 的兩大數據類型:大數據

  • 內置數據類型
  • 引用數據類型

內置數據類型

Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。spa

byte:指針

  • byte 數據類型是8位、有符號的,以二進制補碼錶示的整數;
  • 最小值是 -128(-2^7);
  • 最大值是 127(2^7-1);
  • 默認值是 0;
  • byte 類型用在大型數組中節約空間,主要代替整數,由於 byte 變量佔用的空間只有 int 類型的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:code

  • short 數據類型是 16 位、有符號的以二進制補碼錶示的整數
  • 最小值是 -32768(-2^15);
  • 最大值是 32767(2^15 - 1);
  • Short 數據類型也能夠像 byte 那樣節省空間。一個short變量是int型變量所佔空間的二分之一;
  • 默認值是 0;
  • 例子:short s = 1000,short r = -20000。

int:對象

  • int 數據類型是32位、有符號的以二進制補碼錶示的整數;
  • 最小值是 -2,147,483,648(-2^31);
  • 最大值是 2,147,483,647(2^31 - 1);
  • 通常地整型變量默認爲 int 類型;
  • 默認值是 0 ;
  • 例子:int a = 100000, int b = -200000。

long:blog

  • long 數據類型是 64 位、有符號的以二進制補碼錶示的整數;
  • 最小值是 -9,223,372,036,854,775,808(-2^63);
  • 最大值是 9,223,372,036,854,775,807(2^63 -1);
  • 這種類型主要使用在須要比較大整數的系統上;
  • 默認值是 0L;
  • 例子: long a = 100000L,Long b = -200000L。
    "L"理論上不分大小寫,可是若寫成"l"容易與數字"1"混淆,不容易分辯。因此最好大寫。

float:內存

  • float 數據類型是單精度、32位、符合IEEE 754標準的浮點數;
  • float 在儲存大型浮點數組的時候可節省內存空間;
  • 默認值是 0.0f;
  • 浮點數不能用來表示精確的值,如貨幣;
  • 例子:float f1 = 234.5f。

double:

  • double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數;
  • 浮點數的默認類型爲double類型;
  • double類型一樣不能表示精確的值,如貨幣;
  • 默認值是 0.0d;
  • 例子:double d1 = 123.4。

boolean:

  • boolean數據類型表示一位的信息;
  • 只有兩個取值:true 和 false;
  • 這種類型只做爲一種標誌來記錄 true/false 狀況;
  • 默認值是 false;
  • 例子:boolean one = true。

char:

  • char類型是一個單一的 16 位 Unicode 字符;
  • 最小值是 \u0000(即爲0);
  • 最大值是 \uffff(即爲65,535);
  • char 數據類型能夠儲存任何字符;
  • 例子:char letter = 'A';。

實例

對於數值類型的基本類型的取值範圍,咱們無需強制去記憶,由於它們的值都已經以常量的形式定義在對應的包裝類中了。請看下面的例子:

 1 public class PrimitiveTypeTest {  
 2     public static void main(String[] args) {  
 3         // byte  
 4         System.out.println("基本類型:byte 二進制位數:" + Byte.SIZE);  
 5         System.out.println("包裝類:java.lang.Byte");  
 6         System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);  
 7         System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);  
 8         System.out.println();  
 9   
10         // short  
11         System.out.println("基本類型:short 二進制位數:" + Short.SIZE);  
12         System.out.println("包裝類:java.lang.Short");  
13         System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);  
14         System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);  
15         System.out.println();  
16   
17         // int  
18         System.out.println("基本類型:int 二進制位數:" + Integer.SIZE);  
19         System.out.println("包裝類:java.lang.Integer");  
20         System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);  
21         System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);  
22         System.out.println();  
23   
24         // long  
25         System.out.println("基本類型:long 二進制位數:" + Long.SIZE);  
26         System.out.println("包裝類:java.lang.Long");  
27         System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);  
28         System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);  
29         System.out.println();  
30   
31         // float  
32         System.out.println("基本類型:float 二進制位數:" + Float.SIZE);  
33         System.out.println("包裝類:java.lang.Float");  
34         System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);  
35         System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);  
36         System.out.println();  
37   
38         // double  
39         System.out.println("基本類型:double 二進制位數:" + Double.SIZE);  
40         System.out.println("包裝類:java.lang.Double");  
41         System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);  
42         System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);  
43         System.out.println();  
44   
45         // char  
46         System.out.println("基本類型:char 二進制位數:" + Character.SIZE);  
47         System.out.println("包裝類:java.lang.Character");  
48         // 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制檯  
49         System.out.println("最小值:Character.MIN_VALUE="  
50                 + (int) Character.MIN_VALUE);  
51         // 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制檯  
52         System.out.println("最大值:Character.MAX_VALUE="  
53                 + (int) Character.MAX_VALUE);  
54     }  
55 }

 

編譯以上代碼輸出結果以下所示:

基本類型: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

 

Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的"E+數字"表示E以前的數字要乘以10的多少次方。好比3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。

實際上,JAVA中還存在另一種基本類型void,它也有對應的包裝類 java.lang.Void,不過咱們沒法直接對它們進行操做。


引用類型

  • 在Java中,引用類型的變量很是相似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定爲一個特定的類型,好比 Employee、Puppy 等。變量一旦聲明後,類型就不能被改變了。
  • 對象、數組都是引用數據類型。
  • 全部引用類型的默認值都是null。
  • 一個引用變量能夠用來引用任何與之兼容的類型。
  • 例子:Site site = new Site("Runoob")。

Java 常量

常量在程序運行時是不能被修改的。

在 Java 中使用 final 關鍵字來修飾常量,聲明方式和變量相似:

final double PI = 3.1415927;

 

雖然常量名也能夠用小寫,但爲了便於識別,一般使用大寫字母表示常量。

字面量能夠賦給任何內置類型的變量。例如:

byte a = 68;
char a = 'A'

 

byte、int、long、和short均可以用十進制、16進制以及8進制的方式來表示。

當使用常量的時候,前綴 0 表示 8 進制,而前綴 0x 表明 16 進制, 例如:

int decimal = 100;
int octal = 0144;
int hexa =  0x64;

和其餘語言同樣,Java的字符串常量也是包含在兩個引號之間的字符序列。下面是字符串型字面量的例子:

"Hello World"
"two\nlines"
"\"This is in quotes\""

字符串常量和字符常量均可以包含任何Unicode字符。例如:

char a = '\u0001';
String a = "\u0001";

 

Java語言支持一些特殊的轉義字符序列。

符號 字符含義
\n 換行 (0x0a)
\r 回車 (0x0d)
\f 換頁符(0x0c)
\b 退格 (0x08)
\0 空字符 (0x20)
\s 字符串
\t 製表符
\" 雙引號
\' 單引號
\\ 反斜槓
\ddd 八進制字符 (ddd)
\uxxxx 16進制Unicode字符 (xxxx)

自動類型轉換

整型、實型(常量)、字符型數據能夠混合運算。運算中,不一樣類型的數據先轉化爲同一類型,而後進行運算。

轉換從低級到高級。

低  ------------------------------------>byte,short,char—> int —> long—> float —> double

數據類型轉換必須知足以下規則:

  • 1. 不能對boolean類型進行類型轉換。

  • 2. 不能把對象類型轉換成不相關類的對象。

  • 3. 在把容量大的類型轉換爲容量小的類型時必須使用強制類型轉換。

  • 4. 轉換過程當中可能致使溢出或損失精度,例如:

    int i =128;   
    byte b = (byte)i;

    由於 byte 類型是 8 位,最大值爲127,因此當強制轉換爲 int 類型值 128 時候就會致使溢出。

  • 5. 浮點數到整數的轉換是經過捨棄小數獲得,而不是四捨五入,例如:

    (int)23.7 == 23;        
    (int)-45.89f == -45 

自動類型轉換

必須知足轉換前的數據類型的位數要低於轉換後的數據類型,例如: short數據類型的位數爲16位,就能夠自動轉換位數爲32的int類型,一樣float數據類型的位數爲32,能夠自動轉換爲64位的double類型。

實例

 1 public class ZiDongLeiZhuan{
 2         public static void main(String[] args){
 3             char c1='a';//定義一個char類型
 4             int i1 = c1;//char自動類型轉換爲int
 5             System.out.println("char自動類型轉換爲int後的值等於"+i1);
 6             char c2 = 'A';//定義一個char類型
 7             int i2 = c2+1;//char 類型和 int 類型計算
 8             System.out.println("char類型和int計算後的值等於"+i2);
 9         }
10 }

運行結果爲:

char自動類型轉換爲int後的值等於97
char類型和int計算後的值等於66

解析:c1的值爲字符'a',查ascii碼錶可知對應的int類型值爲97,'A'對應值爲65,因此i2=65+1=66。

強制類型轉換

  • 1. 條件是轉換的數據類型必須是兼容的。

  • 2. 格式:(type)value type是要強制類型轉換後的數據類型 實例:

    實例

    public class QiangZhiZhuanHuan{
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1;//強制類型轉換爲byte
            System.out.println("int強制類型轉換爲byte後的值等於"+b);
        }
    }

    運行結果:

    int強制類型轉換爲byte後的值等於123 

隱含強制類型轉換

  • 1. 整數的默認類型是 int。

  • 2. 浮點型不存在這種狀況,由於在定義 float 類型時必須在數字後面跟上 F 或者 f。

筆記列表

 
  1. Java 裏使用 long 類型的數據必定要在數值後面加上 L,不然將做爲整型解析:

    long g = (long)9223372036854775807;
    long h = (long)-9223372036854775808;

     

     或者
    long g = 9223372036854775807;
    long h = -9223372036854775808;

     

     

    會出現如下報錯信息:

    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The literal 9223372036854775807 of type int is out of range
    The literal 9223372036854775808 of type int is out of range 

     

    溢出了~

    解決方法在數值後面加上 L:

    long value = 9223372036854775807L;

     

  2. 引用類型是一個對象類型,它的值是指向內存空間的引用,就是地址,所指向的內存中保存着變量所表示的一個值或一組值。

    int a;
    a = 250; // 聲明變量a的同時,系統給a分配了空間。

     

    引用類型就不是了,只給變量分配了引用空間,數據空間沒有分配,由於不知道數據是什麼。

    錯誤的例子:

    MyDate today;
    today.day = 4; // 發生錯誤,由於today對象的數據空間未分配。

     

    引用類型變量在聲明後必須經過實例化開闢數據空間,才能對變量所指向的對象進行訪問。

    MyDate today;          //將變量分配一個保存引用的空間
    today = new MyDate();     // 這句話是2步,首先執行new MyDate(),給today變量開闢數據空間,而後再執行賦值操做

     

    引用變量賦值:

    MyDate a,b;       // 在內存開闢兩個引用空間
    a = new MyDate();       // 開闢MyDate對象的數據空間,並把該空間的首地址賦給a
    b = a;                   // 將a存儲空間中的地址寫到b的存儲空間中
  3. 那麼 a+b 是什麼類型?

    答:在java的世界裏,若是比int類型小的類型作運算,java在編譯的時候就會將它們統一強轉成int類型。當是比int類型大的類型作運算,就會自動轉換成它們中最大類型那個。

  4. char a = 'S'; char 後面賦值要用單引號,由於是字符型數據類型

    String a = "I AM FINE"; String 後面賦值要用雙引號,由於是字符串數據類型

相關文章
相關標籤/搜索