(1). 數值型- 整型:byte、short、int、long(默認值0)- 浮點型:float、double (默認值0.0)(2). 字符型: char (默認值 '\u0000')(3). 布爾型:boolean (默認值false)
2. 引用數據類型:
數組、類、接口
3. 基本數據類型的取值範圍
數據類型 |
關鍵字 |
字節數 |
取值範圍 |
布爾型 |
boolean |
1 |
true、false |
字節型 |
byte |
1 |
-27 ~ 27 -1 |
短整型 |
short |
2 |
-215 ~ 215 -1 |
整型 |
int |
4 |
-231 ~ 231 -1 |
長整型 |
long |
8 |
-263 ~ 263 -1 |
字符型 |
char |
2 |
0 ~ 216 -1 |
單精度浮點數 |
float |
4 |
3.402823e+38 ~ 1.401298e-45 |
雙精度浮點數 |
double |
8 |
1.797693e+308 ~ 4.9000000e-324 |
4. 運算溢出現象 :
public static void main(String[] args){
int max = Integer.MAX_VALUE;
intmin = Integer.MIN_VALUE;
System.out.println("MaxValue = "+ max);
System.out.println("MinValue = "+ min);
System.out.println("MaxValue + 1 = "+ ++max);
System.out.println("MinValue -1 = "+ --min);
}
運行結果:
MaxValue = 2147483647
MinValue = -2147483648
MaxValue + 1 = -2147483648
MinValue -1 = 2147483647
觀察結果可以得出:
最小值減1等於最大值,最大值加1等於最小值。
5. 類型轉換與注意事項:
- 整型數字默認的是int型;浮點型數字默認類型是double類型
- 數據範圍小的類型,可以自動轉換爲數據範圍大的類型;數據範圍大的類型,需要強制轉換爲範圍小的類型。
(1). int類型轉long類型(小轉大)
public static void main(String[] args) {
intmax = Integer.MAX_VALUE;
int min = Integer.MIN_VALUE;
long max1 = max + 1;
System.out.println("max1 = "+ max1);
}
運行結果:
max1 =-2147483648
原理分析:
long max1 = max +1;先執行max + 1操作, 然後此時得到int值爲 -2147483648 , 然後執行long max1 = -2147483648。
正確寫法:
long max1 = max +1L;
(2). int類型轉byte類型 (大轉小)
public static void main(String[] args) {
bytebyte1 =11;
intnum1 =10,num2 =2;
byte sum = num1 +num2;
System.out.println("sum= " + sum);
}
首先 : byte byte1 =11;這裏的11是int類型的,但是可以直接賦值給byte,說明byte範圍內的數字,是不需要強制轉換的。但是超過byte範圍的數字需要強制轉換,強制轉換會導致溢出問題。
byte sum = num1 +num2;這裏會編譯失敗,因爲int類型轉換爲byte類型需要強制轉換:bytesum = (byte)(num1 + num2);
(3). 定義一個float變量
public static void main(String[] args) {
floatnum =1.1;
System.out.println("num = "+ num);
}
代碼分析:
float num =1.1;這裏會編譯失敗,定義float需要加上F或f,表示數字類型是float類型,需要修改爲floatnum = 1.1F;
(4). 浮點數運算精度丟失 , 出現很長的小數問題
public static void main(String[] args) {
System.out.println("result1 = "+ (3.0-2.6));
System.out.println("result2 = "+ (0.06 + 0.01));
System.out.println("result3 = "+ (1.0 - 0.42));
System.out.println("result4 = "+ (4.015 * 100));
System.out.println("result5 = "+ (303.1 / 1000));
}
運行結果:
result1= 0.3999999999999999
result2= 0.06999999999999999
result3= 0.5800000000000001
result4= 401.49999999999994
result5= 0.30310000000000004
解決方案: 使用BigDecimal來解決
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("3.0");
BigDecimal num2 =newBigDecimal("2.6");
System.out.println("result1 = "+ (num1.subtract(num2)));
}
運行結果: result1 =0.4
(5). 整數除法計算
public static void main(String[] args) {
intnum =10;
double result = num / 4;
System.out.println("result = "+ result);
}
運行結果:
result =2.0
原理分析:
double result = num /4;先執行num/4操作 , 運行結果爲int型2 , 然後執行double result =2 。
正確寫法:
double result = num /4.0;
(6). 特殊進制:
public static void main(String[] args){
intnum =011;
System.out.println("num = "+ num);
}
運行結果:
num = 9
原理分析:
因爲以0開頭的數字表示是8進制 , 以0x開頭的數字表示是16進制
6. char類型
char在java中是16位的,因爲java用的是unicode,而且8位的ASCII碼包含在unicode中,是從0~127。所以java可以保存中文等unicode編碼字符。
public static void main(String[] args) {
char c ='中';
int index = c;
System.out.println("index = "+ index);
}
運行結果: index = 20013
7. boolean類型
在java中,boolean就是true和false,不能用數字或者其他類型代替。