Java基礎(03)--基本資料型別
阿新 • • 發佈:2020-08-09
Java基礎(03)--基本資料型別
變數就是申請記憶體來儲存值。也就是說,當建立變數的時候,需要在記憶體中申請空間。
記憶體管理系統根據變數的型別為變數分配儲存空間,分配的空間只能用來儲存該型別資料。
Java 的兩大資料型別:
- 內建資料型別
- 引用資料型別
內建資料型別
Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。
類別 | 資料型別 | 值範圍 | 預設值 | 備註 |
---|---|---|---|---|
整型 | byte | -2^7 ~ 2^7 (1byte) | 0 |
|
short | -2^15 ~ 2^15-1 (2byte) | 0 |
||
int | -2^31 ~ 2^31-1 (4byte) | 0 |
一般地整型變數預設為 int 型別 | |
long | -2^63 ~ 2^63-1 (8byte) | 0 |
||
浮點型 | float | 4byte | 0.0f |
浮點數不能用來表示精確的值,如貨幣 |
double | 8byte | 0.0d |
浮點數的預設型別為double型別double型別同樣不能表示精確的值 | |
布林型 | boolean | true false |
false |
boolean資料型別表示一位的資訊 |
char | 最小值是 \u0000 (即為0)最大值是 \uffff (即為65,535) |
char型別是一個單一的 16 位 Unicode 字元 | ||
public class base.PrimitiveTypeTest { public static void main(String[] args){ // 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); } }
擴充套件介紹
public class base.Demo { public static void main(String[] args) { /* * 整數擴充套件 * 進位制: * 二進位制 0b * 八進位制 0 * 十進位制 * 十六進位制 0x 0~9 a~f(10~16) * */ int i1 = 0b101; int i2 = 0107; int i3 = 10; int i4 = 0x10a; System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println(i4); System.out.println("=========================================================="); /* * 浮點數擴充套件 * float double 特點: 有限、離散、舍入誤差 * 應避免使用浮點數進行比較 * */ float f = 0.1f; double d = 1.0; d = d / 10; System.out.println(f==d); // false System.out.println(f); System.out.println(d); float f2 = 2231131542346465326f; float f3 = f2 + 1; System.out.println(f2==f3); // true /* * 字元擴充套件 * 所有的字元本質上是整數 * 編碼表 Unicode表 2Byte 0~65536, 字元與數字的對映關係 * */ char c1 = 'a'; char c2 = '中'; System.out.println("================================================="); System.out.println(c1); System.out.println((int)c1); // 強制轉換 System.out.println(c2); System.out.println((int)c2); // 強制轉換 char c3 = '\u0061'; System.out.println(c3); c3 = '\u0061'; System.out.println(c3); /* * 轉義字元 * \t 製表符 * \n 換行 * */ System.out.println("======================================================="); System.out.println("\\n"); System.out.println("base.Hello\tWorld!"); } }
引用資料型別
- 在Java中,引用型別的變數非常類似於C/C++的指標。引用型別指向一個物件,指向物件的變數是引用變數。這些變數在宣告時被指定為一個特定的型別,比如 base.Employee、base.Puppy 等。變數一旦聲明後,型別就不能被改變了。
- 物件、陣列都是引用資料型別。
- 所有引用型別的預設值都是null。
- 一個引用變數可以用來引用任何與之相容的型別。
Site site = new Site('wukong');
Java常量
常量在程式執行時是不能被修改的。
在 Java
中使用final
關鍵字來修飾常量,宣告方式和變數類似:
final double PI = 3.1415926;
型別轉換
整型、實型(常量)、字元型資料可以混合運算。運算中,不同型別的資料先轉化為同一型別,然後進行運算。
轉換從低階到高階。
// 低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
資料型別轉換必須滿足如下規則:
-
不能對boolean型別進行型別轉換。
-
不能把物件型別轉換成不相關類的物件。
-
在把容量大的型別轉換為容量小的型別時必須使用強制型別轉換。
-
轉換過程中可能導致溢位或損失精度,例如:
int i = 128; byte b = (byte) i;
-
浮點數到整數的轉換是通過捨棄小數得到,而不是四捨五入,例如:
(int) 23.7 == 23; (int) -45.89f == -45;
自動型別轉換
必須滿足轉換前的資料型別的位數要低於轉換後的資料型別,例如: short資料型別的位數為16位,就可以自動轉換位數為32的int型別,同樣float資料型別的位數為32,可以自動轉換為64位的double型別。
public class base.Demo2 {
public static void main(String[] args){
char c1 = 'a'; // 字元 a ,查 ASCII 碼錶可知對應的 int 型別值為 97
int i1 = c1;
System.out.println("char自動型別轉換為int後的值等於" + i1);
char c2 = 'A'; // A 對應值為 65
int i2 = c2 + 1;
System.out.println("char型別和int計算後的值等於" + i2);
}
}
強制型別轉換
- 條件是轉換的資料型別必須是相容的
- 格式:
(type)value
type
是要強制型別轉換後的資料型別
public class base.Demo3 {
public static void main(String[] args) {
int i1 = 123;
byte b1 = (byte)i1;
System.out.println("int強制型別轉換為byte後的值等於" + b1); // 123
int i2 = 129;
byte b2 = (byte)i2;
System.out.println("int強制型別轉換為byte後的值等於" + b2); // -127 強制型別轉換後,精度丟失
}
}
隱含強制型別轉換
- 整數的預設型別是
int
- 浮點型不存在這種情況,因為在定義
float
型別時必須在數字後面跟上F 或者 f
, 浮點型預設型別是double