《Java架構築基》從Java基礎講起——基本數據類型

1. 基本類型有哪些

Java定義了八種基本數據類型:byte,short,int,long,char,float,double,boolean。java

  • 基本數據類型也稱爲簡單類型,這些類型能夠分爲四組:
    • 整型。包括byte,short,int,long。用於表示有符號整數。
    • 浮點型。包括float,double。用於表示帶小數位的數字。
    • 字符型。包括char。用於表示字符集中的符號。
    • 布爾型。包括boolean。用於表示true/false值。
  • 開發者能夠直接使用這些類型,也可使用它們來構造數組以及自定義類型。所以,它們造成了全部能夠建立的其餘類型的基礎。Java在其餘方面是徹底面向對象的,但基本數據類型並非面向對象的,這樣設計的緣由是爲了效率。將基本數據類型設計爲對象會極大地下降性能。
  • 由於Java語言的特點其中一個就是具有可移植性,即無論在哪一個平臺下運行,一份代碼無需修改就能夠直接運行。爲了確保這一點,基本數據類型被定義爲具備明確的範圍和數學行爲,與C和C++這類語言「容許整數的大小隨着執行環境的要求而變化」不一樣,Java語言的數據類型都具備嚴格定義的範圍。不管在那種平臺下,int老是32位的。雖然嚴格指定基本數據類型的範圍在某些環境下會形成性能損失,但這是爲了實現可移植性而必須付出的。

Java的八種基本類型說明以下所示,其中每一種都有特定的格式和大小 |基本類型|說明|字節數 |:----:|:----:|:----: |byte|字節長度的整數,八位|1個字節 |short|短整數,十六位|2個字節 |int|整數,三十二位|4個字節 |long|長整數,六十四位|8個字節 |float|單精度浮點數,三十二位|4個字節 |double|雙精度浮點數,六十四位|8個字節 |char|Unicode字符|2個字節 |boolean|布爾值|1個字節程序員

2. 字面值有哪些類型

基本類型的字面值有四種子類型:整數字面值,浮點數字面值,字符字面值,布爾字面值數組

3. 整型數據介紹

3.1 整型數據

Java定義了四種整數類型:byte,short,int,long。全部這些類型都是有符號的、正的整數或者負的整數。Java不支持無符號(正值)的整數。博客 名稱|寬度|範圍 :--:|:--:|:--:| long|64|-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 int|32|-2 147 483 648 ~ 2 147 483 647 short|16|-32 768 ~ 32767 byte|8|-128 ~ 127ide

當中,最經常使用的整數類型是int。函數

  • int類型常常用於控制循環變量和索引數組。對於那些不須要更大範圍的int類型數值的狀況,你可能會認爲使用範圍更小的byte和short類型效率會更高,然而事實並不是如此。由於在表達式中使用byte和short值時,當對錶達式求值時它們會被提高爲int類型。因此,當須要使用整數時,int一般是最好的選擇。

3.2 整數字面值

整數字面值能夠寫爲十進制,十六進制(加前綴0x或0X),八進制(加前綴0),二進制(加前綴0B或0b)性能

//十進制
int x=10;
//十六進制數,即十進制的32
int y=0x20;
//八進制,即十進制的15
int z=017;
//二進制,即十進制的7
int u=0b0111;

整數字面值用於將值賦給byte,short,int和long類型的變量。所賦值不能超出變量的存儲範圍設計

  • 例如,如下代碼在IDE中就會提示錯誤,由於byte的最大值爲127
byte b = 250;
  • 要將一個值賦給long類型時,在數字的後面要加上後綴字母L或l。不然,以下代碼中的整數值實際上是被看作是int類型的
long a = 120;
  • 在如下代碼中,就會產生一個錯誤,由於99999999999超出了int類型的存儲能力。爲了解決這個問題,須要在數字後加上後綴字母L或l
long a = 99999999999;

若是整數字面值太長,可讀性會受到影響。code

  • 從Java 7開始,可用在整數字面值中使用下劃線將數字分隔開。
//十進制
int x=1_000_000;
//十六進制數,即十進制的32
int y=0x2_0;
//八進制,即十進制的15
int z=0_17;
//二進制,即十進制的7
int u=0b0_111;

4. 浮點型介紹

4.1 浮點型數據

浮點數也稱爲實數,當計算須要小數精度的表達式時使用。 名稱|寬度|範圍 :--:|:--:|:--:| float|32|1.4e-045 ~ 3.4e+038 double|64|4.9e-324 ~ 1.8e+308對象

float索引

  • float類型表示使用32位存儲的單精度數值。在某些處理器上,單精度運行速度更快,而且佔用的空間是雙精度的一半,可是當數值很是大或者很是小時會變得不精確。若是須要小數部分,且精確度要求不高時,就能夠考慮使用float類型。

double

  • double類型表示使用64位存儲的雙精度數值。在sin()、cos()和sqrt()這類數學函數中,返回值都是double類型。若是須要在不少次迭代運算中保持精度,或是操做很是大的數值時,double類型是最佳選擇。

4.2 浮點數字面值

浮點數包含如下四個部分

  • 一個整數部分
  • 一個小數點
  • 一個小數部分
  • 一個可選的指數

例如,在1.7e8中,1是整數部分,7是小數部分,8是指數

  • 在float和double類型中,0的整數部分是可選的
  • 例如,0.5能夠寫成.5
  • 浮點數字面值加上的後綴字母F或f代表其爲float類型,若是沒有標明,該浮點數字面值將是double類型

5. 字符介紹

5.1 字符型數據

char是用於存儲字符的數據類型。Java的設計初衷是容許程序員編寫在世界範圍內都可使用的語言,所以採用了Unicode標準來表示字符。Unicode定義了一個徹底國際化的字符集,可以表示所有人類語言中的全部字符,爲此須要使用十六位寬度來存儲。char的範圍是0 ~ 65536,沒有負的char值。

對於一些語種,例如英語、德語等,可使用八位寬度來表示這類語言的字符,使用Unicode在必定程度上會下降效率,但這是爲了在全球得到可移植性而必須付出的代價。

儘管char被設計爲容納Unicod字符,但也能夠用做整數類型,能夠對char類型的變量執行算術運算。

5.2 字符字面值

字符字面值是一個Unicode字符,或者是單引號括起來的一個轉義序列

例如

'a'
'b'
'\b' 回退字符
'\n' 換行
'\r' 回車

6. 布爾字面值

布爾類型有兩個值,分別爲true和false。

例如,聲明一個布爾變量bool

boolean bool=true;

7. 基本類型轉換

在涉及處理不一樣數據類型時,經常須要將一個變量的值賦給另外一個變量,這就須要進行類型轉換

默認轉換

  • byte,short,char—int—long—float—double
  • byte,short,char相互之間補轉換,他們參與運算首先轉換爲int類型

強制轉換

  • 格式: 目標類型 變量名 = (目標類型)值或變量名
  • int a = (int) 15.7f;

注意要點

!!!!!!!注意!!!!!!!!
1:在java中,任何一個整數默認爲 int 類型 (1)
2:在java種,任何一個小數,默認爲 double 類型( 1.0)
3:123L 或者 1231 編譯器會將該數當成long類型
4:12.345f 或者12.345F 編譯器會將該數當成float類型

7.1 加寬轉換

當從一種基本類型轉換向另外一種基本類型時,若是後者的大小和前者相同或者更大,就叫作加寬轉換

  • 例如,將int(32位)轉爲long(64位)。此時不會有信息丟失的風險,且加寬轉換是隱式發生的,不須要在代碼中任何事情
  • 例如
int a=10;
long b=a;

7.2 收窄轉換

收窄轉換髮生在從一種基本類型轉換爲另外一種更小類型的轉換中

  • 例如,從long(64位)到int(32位)。收窄轉換須要顯示調用,用圓括號指定目標類型
long a=10;
int b=(int)a;
  • 若是被轉換的值比目標類型的容量還要大的話,收窄轉換將致使信息丟失
  • 例如,9876543210對int類型來講太大了
long a=9876543210L;
int b=(int)a;
//輸出值是1286608618
System.out.println(b);

8. 表達式中的自動類型提高

除了賦值外,在表達式中也可能會發生類型轉換。在表達式中,中間值要求的精度有時會超出操做數的範圍。博客

例如:

byte a = 40;
byte b = 50;
byte c = 100;
int d = a * b / c;

中間部分 a b 很容易超出byte操做數的範圍。爲了解決這類問題,當對錶達式求值時,Java會自動將每一個byte,short或char操做數提高爲int類型。這意味着使用int類型而不是byte類型執行子表達式a b。所以,即時a和b都被指定爲byte類型,中間表達式(50 * 40)的結果2000是合法的。

自動類型提高頗有用,但有時候會致使難以理解的編譯時錯誤。例如:

byte b=10;
//錯誤
b= b*2;

如上代碼試圖將 10 * 2 的結果(一個徹底有效的byte值)保存到byte變量中,可是編譯器卻提示錯誤。當計算表達式的值時,操做數被自動提高爲int類型,因此結果也被提高爲int類型。所以,如今是試圖將一個int類型值轉爲byte變量,若是不使用強制類型轉換,就不能將結果賦給byte變量。

Java定義了幾個應用於表達式的類型提高規則

  • 對於一元操做符來講,若是操做數的類型是byte,short或char,運算結果提高爲int類型
  • 對與二元操做符來講,提高規則是從如下幾條依次選擇一條執行
  • 若是操做數類型均爲byte、short或char,那麼兩個數均轉爲int類型,結果數也將爲int類型
  • 若是操做數包含double類型,那麼另外一個操做數也轉爲double,結果數也將爲double類型
  • 若是操做數包含float類型,那麼另外一個操做數也轉爲float,結果數也將爲float類型
  • 若是操做數包含long類型,那麼另外一個操做數也轉爲long,結果數也將爲long類型
相關文章
相關標籤/搜索