Java是一種強類型語言,每一個變量都必須聲明其類型。測試
Java的數據類型分爲兩大類:基本類型(primitive type)和引用類型 (reference type) 編碼
Java中定義了3類8種基本數據類型spa
邏輯型-boolean 設計
文本型- charcode
數值型- byte, short, int, long, float, double對象
注:引用數據類型的大小統一爲4個字節,記錄的是其引用對象的地址!blog
整型用於表示沒有小數部分的數值,它容許是負數。ci
整型的範圍與運行Java代碼的機器無關,這正是Java程序具備很強移植能力的緣由之一。於此相反,C和C++程序須要針對不一樣的處理器選擇最有效的整形。unicode
類型字符串 |
佔用存儲空間 |
表數範圍 |
Byte |
1字節 |
-128~127 |
Short |
2字節 |
-215 ~ 215-1 (-32768~32767) |
Int |
4字節 |
-231 ~ 231-1 (-2147483648~2147483647) 約21億 |
Long |
8字節 |
-263 ~ 263-1 |
Java 語言整型常數的三種表示形式:
十進制整數,如:99, -500, 0。
八進制整數,要求以 0 開頭,如:015。
十六進制數,要求 0x 或 0X 開頭,如:0x15 。
Java語言的整型常數默認爲int型,聲明long型常量能夠後加‘ l ’或‘ L ’ ,如:
a = 55555555; //不出錯,在Int表示的範圍內(21億內)。
b = 55555555555; //不加l出錯,已經超過int表示的範圍。 報錯:The literal 55555555555 of type int is out of range
Java中沒有無符號類型
//測試整數類型:byte,short,int,long。以及進制之間的轉換問題 public class TestDataType { public static void main(String[] args){ int a = 10; int a2 = 010; int a3 = 0xf; // byte b = 200; // System.out.println(b); System.out.println(a); System.out.println(a2); System.out.println(a3); System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toOctalString(a)); System.out.println(Integer.toHexString(a)); t a5 = 10; long a6 = 200; byte b2 = 100; //若是數據的大小沒有超過byte/short/char的表述範圍,則能夠自動轉型。 long a7 = 11123213232L; long l = 3; long l2 = l+3; //L問題 } }
類型 |
佔用存儲空間 |
表數範圍 |
Float |
4字節 |
-3.403E38~3.403E38 |
Double |
8字節 |
-1.798E308~1.798E308 |
float類型又被稱做單精度類型,尾數能夠精確到7位有效數字,在不少狀況下,float類型的精度很難知足需求。
double表示這種類型的數值精度是float類型的兩倍,又被稱做雙精度,絕大部分應用程序都採用double類型。
Java 浮點類型常量有兩種表示形式:
十進制數形式,例如:3.14 314.0 0.314
科學記數法形式,例如:314e2 314E2 314E-2
double f = 314e2; //314*10^2-->31400.0 double f2 = 314e-2; //314*10^(-2)-->3.14
Float類型的數值有一個後綴F/f ,沒有後綴F/f的浮點數值默認爲double類型。也能夠在浮點數值後添加後綴D/d, 以明確其爲double類型
浮點類型float, double的數據不適合在不允許舍入偏差的金融計算領域。若是須要進行不產生舍入偏差的精確數字計算,須要使用BigDecimal類。
注:
主要理由:因爲字長有限,浮點數可以精確表示的數是有限的,於是也是離散的。浮點數通常都存在舍入偏差,不少數字沒法精確表示(例如0.1),其結果只能是接近,但不等於。
二進制浮點數不能精確的表示0.1,0.01,0.001這樣10的負次冪。並非全部的小數都能能夠精確的用二進制浮點數表示。
最好全完避免使用浮點數比較
float f = 0.1f; double d = 1.0/10; System.out.println(f==d); //false float d1 = 423432423f; float d2 = d1+1; if(d1==d2){ System.out.println("d1==d2"); }else{ System.out.println("d1!=d2"); }
大數值:
Java.math下面的兩個有用的類:BigInteger和BigDecimal,這兩個類能夠處理任意長度的數值。BigInteger實現了任意精度的整數運算。BigDecimal實現了任意精度的浮點運算。
浮點數使用總結:
1. 默認是double
2. 浮點數存在舍入偏差,不少數字不能精確表示。若是須要進行不產生舍入偏差的精確數字計算,須要使用BigDecimal類。
3. 避免比較中使用浮點數
代碼:
//測試浮點數 public class TestFloatType { public static void main(String[] args){ //double d = 3.14; //浮點數常量默認類型是double。 //float f = 6.28F; double d2 = 314e-2; //採用科學計數法的寫法 System.out.println(d2); float f = 0.1f; double d = 1.0/10; System.out.println(f==d); //false } }
.單引號用來表示字符常量。例如‘A’是一個字符,它與「A」是不一樣的,「A」表示含有一個字符的字符串。
. char 類型用來表示在Unicode編碼表中的字符。
Unicode編碼被設計用來處理各類語言的全部文字,它佔2個字節,可容許有65536個字符;ASCII碼佔1個字節,可容許有128個字符,是Unicode編碼表中前128個字符。
char eChar = 'a'; char cChar ='中';
Unicode具備從0到65535之間的編碼,他們一般用從’\u0000’到’\uFFFF’之間的十六進制值來表示(前綴爲u表示Unicode)
char c = ‘\u0061;
.Java 語言中還容許使用轉義字符 ‘\’ 來將其後的字符轉變爲其它的含義,
char c2 = '\n'; //表明換行符
轉義符 |
含義 |
Unicode值 |
\b |
退格(backspace) |
\u0008 |
\n |
換行 |
\u000a |
\r |
回車 |
\u000d |
\t |
製表符(tab) |
\u0009 |
\「 |
雙引號 |
\u0022 |
\‘ |
單引號 |
\u0027 |
\\ |
反斜槓 |
\u005c |
注:之後咱們學的String類,實際上是字符序列(char sequence)。
boolean類型(一位,不是一個字節) boolean類型有兩個值,true和false,不能夠 0 或非 0 的整數替代 true 和 false ,這點和C語言不一樣。
boolean 類型用來判斷邏輯條件,通常用於程序流程控制。
boolean flag ; flag = ………; if(flag) { // true分支 } else { // false分支 }
//測試char public class TestCharType { public static void main(String[] args){ char c1 = 'a'; char c2 = '尚'; //unicode 2: 0-65535 char c3 = '\n'; System.out.print(c1); System.out.print(c3); System.out.print(c2); char c4 = 'a'; int i = c4 + 2; char c5 = (char)i; //強制轉型 System.out.println(c5);