新手初入Java(二)資料型別、變數和常量以及拆包和
資料型別、變數和常量以及拆包和裝包
一、資料型別
Java資料型別分為基本型別(primitive types)和引用型別(reference type),其中基本型別又分為數值型、字元型、布林型。引用型別又分為類型別、介面型別、陣列型別、null型別。這兩種大的型別包含了int,double,char,等許多。其關係如下圖:
其中:
- byte位元組型1位元組 8bit 最大儲存資料量是255,存放的資料範圍是-128~127之間。
- short短整型2位元組 16bit最大資料儲存量是65536,資料範圍是-32768~32767之間。
- int整型4位元組 32bit最大資料儲存容量是2的32次方減1,資料範圍是負的2的31次方到正的2的31次方減1。
- long長整型8位元組 64bit最大資料儲存容量是2的64次方減1,資料範圍為負的2的63次方到正的2的63次方減1 。
- 浮點型float單精度4位元組 32bit資料範圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F。 如float=2.5f;
- double雙精度8位元組 64bit資料範圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加 。
- char字元型用單引號 。
- 布林型別 boolean 布林型true/false(只有真假兩種結果)。
簡單型別一般適合儲存少量資料,可以實現高效率處理。
引用型別的變數在堆疊(Stack)中儲存對資料(物件)的引用(地址),資料(物件)儲存在堆(Heap)中。對於引用型別,兩個變數可以引用同一個物件,因此對一個變數的操作可能影響另一個變數所引用的物件。
Java基本資料型別的相互轉化:
- 自動型別轉換:容量小的資料型別可以自動轉化為容量大的資料型別
int–>float,long–>float,long–>double在轉換時可能會出現精度的損失,而箭頭方向表示無資料丟失的自動型別轉換。
二、變數和常量
變數: 變量表示儲存位置,每個變數必須具有一個型別。
變數的宣告和賦值: 在方法內部宣告的變數,稱為"區域性變數"。在類內部(但不在該類內部的任何方法中)宣告的變數,稱為"成員變數",即類的欄位。
區域性變數的宣告和賦值格式如下:
(1)宣告變數:
資料型別 變數名[,變數名…];
資料型別 變數名=初值[, 變數名=初值…];
(2)變數賦值:
變數=要賦的值;
注:
Java區域性變數被訪問之前必須初始化,否則編譯時會報錯。因為,不可能訪問一個未初始化的變數。
例如:
程式碼如下:
public static void main(String[] args) {
int i1;
i1=123;
int i2=456;
double d1=12.3,d2,d3=45.6;
System.out.println("i1="+i1); //輸出i1;
System.out.println("i2="+i2); //輸出i2;
System.out.println("d1="+d1); //輸出d1;
//System.out.println("d2="+d2); //編譯錯誤:變數d2被訪問之前沒有賦值
System.out.println("d3="+d3); //輸出d3;
}
執行結果如下:
變數的作用域:
變數宣告的位置不同,其可被訪問的範圍也不同。變數的可被訪問範圍稱為變數的作用域。Java語言中的變數按其作用域大致可以分為型別成員變數、方法體區域性變數(包括方法引數)、語句塊區域性變數。
- 型別成員變數:型別成員變數實在類型別中宣告的變數,包括靜態變數和例項變數,其有效範圍(作用域)為類型別定義體內
- 方法體區域性變數:方法體區域性變數是方法中宣告的變數,其有效範圍(作用域)為方法體內。方法所帶的引數也屬於過程級區域性變數,其有效範圍(作用域)為方法體內
- 語句塊區域性變數:語句塊區域性變數實在控制結構塊中宣告的變數。例如,if、for等語句中定義的變數,其有效範圍(作用域)為控制結構塊內
常量:
(1)文字常量: 程式碼中出現的文字形式常數,即文字常量,通常用來表示簡單型別、String型別和null型別的值
(2)整型常量: 整型字串通常解釋為int型別。如果加字尾L(大寫字母L,也可使用小寫字母l,但小寫字母l容易與數字1混淆,故不建議使用),則解釋為long型別。例如:
int int1 = 123; //整型變數123為int型
long long1=123L; //整型變數123L為long型
編譯器通常將整數解釋為十進位制(基數為10)數制,可以用字首0x(或0X)將整數強制為十六進位制(基數為16)數制,或使用字首0(數字0)將整數強制為八進位制(基數為8),如圖表2-3所示。注意,跟在字首後面的數字必須符合數制。
數制 | 字首 | 有效數值 | 示例 |
---|---|---|---|
十進位制(以10為基數) | 0~9 | 0、1、2、7、8、10、11 | |
十六進位制(基數為16) | 0x(或0X) | 0 ~9、A ~F或0 ~9和a ~f | 0x0、0x1、0x2、0x7 |
八進位制(基數為8) | 0 | 0 ~7 | 00、01、02、03、010 |
(3)浮點數型別常量: 浮點數只能表示十進位制數。浮點數有兩種表示方法,即標準表示法和科學記數法。浮點數又分為單精度數和雙精度數。
(4)布林型別常量: 布林型別常量分別為true和false。布林型別常量可以賦值給布林型別變數。例如:
boolean b1 = true;
(5)字元型別常量: Java字元常量在單引號內包含所需的字元,例如’a’、‘A’。
(6)字串型別常量: Java的字串常量是用雙引號(" “)括起來的一串字元。如"Hello,World”
String str1="程式設計";
String str2="Hello World";
(7)使用者宣告常量: 在方法內部宣告的常量,稱為"區域性常量";在類(但不在該類內部的任何方法中)中宣告的常量,稱為"成員變數",“常量欄位”。
區域性變數的宣告和賦值格式如下:
final 型別 區域性變數名[=初值];
注意: 指定其值後,不能再對其進行賦值修改,否則會產生編譯錯誤。
三、拆包和裝包
(1)裝包: 即簡單型別=》包裝類
(2)拆包:即包裝類=》簡單型別
以下為型別的轉換:
簡單型別 | 包裝類 |
---|---|
int | Integer |
byte | Byte |
char | Character |
short | Short |
boolean | Boolean |
float | Float |
double | Double |
long | Long |
通過裝包和拆包操作機制,可以實現簡單型別和引用型別之間的轉換。