JAVA中的8中基本資料型別
Java語言提供了八種基本型別。六種數字型別(四個整型,兩個浮點型),一種字元型別,還有一種布林型。
1、整數:
定義:沒有小數部分的數字,負數是允許的。
種類:Java提供四種整數型別:
byte 1個位元組 -128到127
short 2個位元組 -32,768到32,767
int 4個位元組 -2,147,483,648到2,147,483,647
long 8個位元組 -9,223,372,036,854,775,808L到9,223,372,036,854,775,807L
2、浮點數:
定義:含有小數部分的數字。
分類:Java提供兩種浮點數:
float 4個位元組 約+-3.40282347E+38F(6~7個有效的十進位制數位) 絕對值:1.4E-45~3.4E38
double 8個位元組 約+-1.79769313486231570E+308(15個有效數位) 絕對值:4.9E-324~1.8E308
說明:
1)float型別的數值有個字尾:f/F,如果沒有後綴f/F,那麼預設為double。double型別的數值也可以使用字尾d/D。
2)當這些數字遇到取值範圍錯誤時,會發生(上溢Overflow);而在遇到像被零除時,會發生下溢(Underflow)。
舉例:
float f = 1.23456712f;
float ff = 1.23456789f;
double d = 1.23456789123456123d;//預設為double型別,可以不帶d
double dd = 1.23456789123456789d;
System.out.println("f ="+f);
System.out.println("ff ="+ff);
System.out.println("d ="+d);
System.out.println("dd ="+dd);
輸出:
f = 1.2345672
ff = 1.2345679
d = 1.2345678912345612 //15位精度
dd = 1.234567891234568 //15位精度
3、字元型別:
定義:單引號用來表示char常量,是容納單字元的一種基本資料型別,佔1byte。
說明:
雙引號則表示一個字串,他是Java的一個物件,並不是資料型別。
4、布林型別:
boolean型別只有兩個值:false和true。 boolean 型別的數值不能直接轉換成其它型別。佔1個位元組。
看一下程式碼:
public class TestString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 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);
}
}
執行結果如下:
運算子對基本型別的影響
當使用+、-、*、/、%運算子對基本型別進行運算時,遵循如下規則:
- 只要兩個運算元中有一個是double型別的,另一個將會被轉換成double型別,並且結果也是double型別;
- 否則,只要兩個運算元中有一個是float型別的,另一個將會被轉換成float型別,並且結果也是float型別;
- 否則,只要兩個運算元中有一個是long型別的,另一個將會被轉換成long型別,並且結果也是long型別;
- 否則,兩個運算元(包括byte、short、int、char)都將會被轉換成int型別,並且結果也是int型別。
當使用+=、-=、*=、/=、%=、運算子對基本型別進行運算時,遵循如下規則:
- 運算子右邊的數值將首先被強制轉換成與運算子左邊數值相同的型別,然後再執行運算,且運算結果與運算子左邊數值型別相同。
根據以上規則,請看:
short s1=1;s1=s1+1;有什麼錯?short s1=1;s1+=1;有什麼錯?
我們來寫個例子試試,Java程式碼
- publicclass PrimitiveTypeTest {
- publicstaticvoid main(String[] args) {
- short s1 = 1;
- // 這一行程式碼會報編譯錯誤
- // s1 = s1 + 1;
- // 這一行程式碼沒有報錯
- s1 = 1 + 1;
- // 這一行程式碼也沒有報錯
- s1 += 1;
- }
- }
當使用“==”運算子在基本型別和其包裝類物件之間比較時,遵循如下規則:
- 只要兩個運算元中有一個是基本型別,就是比較它們的數值是否相等。
- 否則,就是判斷這兩個物件的記憶體地址是否相等,即是否是同一個物件。