java 的數據類型
基本類型
Java 有八種基本類型:
- byte:1 字節,-128~127
- short:2 字節,-32768~32767
- int:4 字節,-2147483648~2147483647
- long:8 字節,-9223372036854775808~9223372036854775807
- float:4 字節,小數點后 32 位
- double:8 字節,小數點后 64 位
- char:2 字節,表示單個字符
- boolean:1 字節,true 或 false
引用類型
類似于 C 語言的指針,引用類型是指向對象在內存中的地址。引用類型可以用來訪問對象的屬性和方法。
Java 有兩種引用類型:
- 類:用來描述對象的類型,包括自定義的類、系統提供的類
- 接口:用來描述一組方法的集合,包括自定義的接口、系統提供的接口
字面量
字面量是指直接寫在代碼中的值,包括整數(十進制、八進制、十六進制)、浮點數、字符、字符串、布爾值等。
數據類型具體介紹
數字
- 從 java7 開始,支持下劃線分隔符,增強可讀性。
int num1 = 123_456; // 123456
int num2 = 0b1010_1010; // 170
int num3 = 0x1234_5678; // 305419896// 不能在浮點數小數點前后使用下劃線分隔符
// 不能在數字的開頭和末尾使用下劃線分隔符
// 不能在X、B、D等特殊字母前后使用下劃線分隔符
字符
- 轉義字符
char c1 = '\n'; // 換行符
char c2 = '\t'; // 制表符
char c3 = '\b'; // 退格符
char c4 = '\r'; // 回車符
char c5 = '\f'; // 換頁符
char c6 = '\''; // 單引號
char c7 = '\"'; // 雙引號
char c8 = '\\'; // 反斜杠
字符串
- 字符串是引用數據類型,用來存儲一系列字符。
- 字符串是不可變的,一旦創建就不能修改。
String str2 = ""; // 空字符串
String str3 = null; // 空引用, 相當于C語言的空指針
- 字符串拼接: 使用 + 運算符進行字符串拼接
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + " " + str2; // "Hello World"
變量
- 任何變量在使用前必須初始化(可以聲明后賦值), 局部變量程序員手動初始化,非局局變量編譯器自動初始化。
byte ----- 0
short ----- 0
int ----- 0
long ----- 0L
float ----- 0.0f
double ----- 0.0d
char ----- '\u0000'
boolean ----- false
對象 ----- null
運算符
- >> 與 >>> 運算符的區別:
- 右移運算符(>>) :有符號右移,將二進制數字右移一位, 最左邊用符號位補齊。
- 無符號右移運算符(>>>) :無符號右移,將二進制數字右移一位, 最左邊用 0 補齊。
-
可以對布爾類型進行位運算, 與普通的邏輯運算符類似, 但少了短路(邏輯中斷)的特性。
-
java 的類型檢查很嚴格, 如在 if 語句中, 括號內的表達式必須是布爾類型。
類型轉換
拓寬基本類型轉換
數據范圍小的轉為數據范圍大的(共 19 種, 可越級轉換), 可以自動轉換:
byte -> short/char -> int -> long -> float -> double
窄化基本類型轉換
數據范圍大的轉為數據范圍小的(共 22 種), 需要強制類型轉換:
double -> float -> long -> int -> short/char -> byte
int i = 10;
byte b = (byte) i; // 窄化轉換
double d = 10.5;
int j = (int) d; // 窄化轉換, 截斷小數部分
一元數字提升
將 byte、short、char 類型的數字進行(部分)一元運算時自動提升為 int 類型。
- 數組的索引, 創建數組時的數組長度
- 一元運算符 +、-、~
- 位移 <<、>>、>>>
二元數字提升
數據范圍大的與數據范圍小的運算時轉為數據范圍大的, 最低限度為 int 類型(兩個 byte 類型相加, 結果為 int 類型)。
int -> long -> float -> double
- 算術運算符: +、-、*、/、%
- 關系運算符: <、>、<=、>=、==、!=
- 位運算: |、&、^
- 三目運算符: 條件運算符? :
注: 符合運算符在相同類型運算時并不會做變量的提升
java 的關鍵字
abstract、assert、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、final、finally、float、for、goto、if、implements、import、instanceof、int、interface、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
true、false、null 是字面量, 不是關鍵字。
java 數組
// 空引用和空數組
int[] arr1;
int[] arr2 = {};
int arr3[] = {};// 聲明時指定數組元素
int[] arr4 = new int[] {1, 2, 3}; //new 表示分配堆空間
int[] arr5 = {1, 2, 3};// 定義時指定數組長度和訪問數組元素
int[] arr6 = new int[5]; // 自動初始化為0
arr6[0] = 1;
arr6[1] = 2;
arr6[2] = 3;// 多維數組
int[][] arr7 = new int[2][3];
方法(函數)
可變參數
可變參數是指方法參數的數量不固定,可以傳入任意數量的參數。可變參數在方法內部被視為一個數組。
可變參數必須是方法的最后一個參數
public static void print(int... args) { // 可變參數, 數組類型, 若不傳參數, 則 args 為 {}, 不為 nullfor (int i : args) {System.out.print(i + " ");}System.out.println();
}
參數傳遞
基本數據類型的參數傳遞為值傳遞,引用數據類型的參數傳遞為引用傳遞(地址)。
方法簽名
由 2 部分組成: 方法名 + 參數類型
public static double sum(int i, long l, double d){return i + l + d;
}// 方法簽名: sum(int,long,double)
方法重載
即: 方法名相同, 方法簽名不同(參數類型不同)
棧幀
棧幀隨著方法的調用而創建, 隨著方法結束而銷毀, 存儲了方法的局部變量信息