溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

《Java架構筑基》從Java基礎講起——基本數(shù)據(jù)類型

發(fā)布時間:2020-06-20 16:22:18 來源:網絡 閱讀:206 作者:未來可期_ 欄目:編程語言

1. 基本類型有哪些

Java定義了八種基本數(shù)據(jù)類型:byte,short,int,long,char,float,double,boolean。

  • 基本數(shù)據(jù)類型也稱為簡單類型,這些類型可以分為四組:
    • 整型。包括byte,short,int,long。用于表示有符號整數(shù)。
    • 浮點型。包括float,double。用于表示帶小數(shù)位的數(shù)字。
    • 字符型。包括char。用于表示字符集中的符號。
    • 布爾型。包括boolean。用于表示true/false值。
  • 開發(fā)者可以直接使用這些類型,也可以使用它們來構造數(shù)組以及自定義類型。因此,它們形成了所有可以創(chuàng)建的其他類型的基礎。Java在其他方面是完全面向對象的,但基本數(shù)據(jù)類型并不是面向對象的,這樣設計的原因是為了效率。將基本數(shù)據(jù)類型設計為對象會極大地降低性能。
  • 因為Java語言的特色其中一個就是具備可移植性,即不管在哪個平臺下運行,一份代碼無需修改就可以直接運行。為了確保這一點,基本數(shù)據(jù)類型被定義為具有明確的范圍和數(shù)學行為,與C和C++這類語言“允許整數(shù)的大小隨著執(zhí)行環(huán)境的要求而變化”不同,Java語言的數(shù)據(jù)類型都具有嚴格定義的范圍。無論在那種平臺下,int總是32位的。雖然嚴格指定基本數(shù)據(jù)類型的范圍在某些環(huán)境下會造成性能損失,但這是為了實現(xiàn)可移植性而必須付出的。

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

2. 字面值有哪些類型

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

3. 整型數(shù)據(jù)介紹

3.1 整型數(shù)據(jù)

Java定義了四種整數(shù)類型:byte,short,int,long。所有這些類型都是有符號的、正的整數(shù)或者負的整數(shù)。Java不支持無符號(正值)的整數(shù)。博客 名稱|寬度|范圍 :--:|:--:|:--:| 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 ~ 127

當中,最常用的整數(shù)類型是int。

  • int類型經常用于控制循環(huán)變量和索引數(shù)組。對于那些不需要更大范圍的int類型數(shù)值的情況,你可能會認為使用范圍更小的byte和short類型效率會更高,然而事實并非如此。因為在表達式中使用byte和short值時,當對表達式求值時它們會被提升為int類型。所以,當需要使用整數(shù)時,int通常是最好的選擇。

3.2 整數(shù)字面值

整數(shù)字面值可以寫為十進制,十六進制(加前綴0x或0X),八進制(加前綴0),二進制(加前綴0B或0b)

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

整數(shù)字面值用于將值賦給byte,short,int和long類型的變量。所賦值不能超出變量的存儲范圍

  • 例如,以下代碼在IDE中就會提示錯誤,因為byte的最大值為127
byte b = 250;
  • 要將一個值賦給long類型時,在數(shù)字的后面要加上后綴字母L或l。否則,如下代碼中的整數(shù)值其實是被看做是int類型的
long a = 120;
  • 在以下代碼中,就會產生一個錯誤,因為99999999999超出了int類型的存儲能力。為了解決這個問題,需要在數(shù)字后加上后綴字母L或l
long a = 99999999999;

如果整數(shù)字面值太長,可讀性會受到影響。

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

4. 浮點型介紹

4.1 浮點型數(shù)據(jù)

浮點數(shù)也稱為實數(shù),當計算需要小數(shù)精度的表達式時使用。 名稱|寬度|范圍 :--:|:--:|:--:| float|32|1.4e-045 ~ 3.4e+038 double|64|4.9e-324 ~ 1.8e+308

float

  • float類型表示使用32位存儲的單精度數(shù)值。在某些處理器上,單精度運行速度更快,并且占用的空間是雙精度的一半,但是當數(shù)值非常大或者非常小時會變得不精確。如果需要小數(shù)部分,且精確度要求不高時,就可以考慮使用float類型。

double

  • double類型表示使用64位存儲的雙精度數(shù)值。在sin()、cos()和sqrt()這類數(shù)學函數(shù)中,返回值都是double類型。如果需要在很多次迭代運算中保持精度,或是操作非常大的數(shù)值時,double類型是最佳選擇。

4.2 浮點數(shù)字面值

浮點數(shù)包含以下四個部分

  • 一個整數(shù)部分
  • 一個小數(shù)點
  • 一個小數(shù)部分
  • 一個可選的指數(shù)

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

  • 在float和double類型中,0的整數(shù)部分是可選的
  • 例如,0.5可以寫成.5
  • 浮點數(shù)字面值加上的后綴字母F或f表明其為float類型,如果沒有標明,該浮點數(shù)字面值將是double類型

5. 字符介紹

5.1 字符型數(shù)據(jù)

char是用于存儲字符的數(shù)據(jù)類型。Java的設計初衷是允許程序員編寫在世界范圍內均可使用的語言,因此采用了Unicode標準來表示字符。Unicode定義了一個完全國際化的字符集,能夠表示全部人類語言中的所有字符,為此需要使用十六位寬度來存儲。char的范圍是0 ~ 65536,沒有負的char值。

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

盡管char被設計為容納Unicod字符,但也可以用作整數(shù)類型,可以對char類型的變量執(zhí)行算術運算。

5.2 字符字面值

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

例如

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

6. 布爾字面值

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

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

boolean bool=true;

7. 基本類型轉換

在涉及處理不同數(shù)據(jù)類型時,常常需要將一個變量的值賦給另一個變量,這就需要進行類型轉換

默認轉換

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

強制轉換

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

注意要點

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

7.1 加寬轉換

當從一種基本類型轉換向另一種基本類型時,如果后者的大小和前者相同或者更大,就叫做加寬轉換

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

7.2 收窄轉換

收窄轉換發(fā)生在從一種基本類型轉換為另一種更小類型的轉換中

  • 例如,從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. 表達式中的自動類型提升

除了賦值外,在表達式中也可能會發(fā)生類型轉換。在表達式中,中間值要求的精度有時會超出操作數(shù)的范圍。博客

例如:

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

中間部分 a b 很容易超出byte操作數(shù)的范圍。為了解決這類問題,當對表達式求值時,Java會自動將每個byte,short或char操作數(shù)提升為int類型。這意味著使用int類型而不是byte類型執(zhí)行子表達式a b。因此,即時a和b都被指定為byte類型,中間表達式(50 * 40)的結果2000是合法的。

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

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

如上代碼試圖將 10 * 2 的結果(一個完全有效的byte值)保存到byte變量中,但是編譯器卻提示錯誤。當計算表達式的值時,操作數(shù)被自動提升為int類型,所以結果也被提升為int類型。因此,現(xiàn)在是試圖將一個int類型值轉為byte變量,如果不使用強制類型轉換,就不能將結果賦給byte變量。

Java定義了幾個應用于表達式的類型提升規(guī)則。

  • 對于一元操作符來說,如果操作數(shù)的類型是byte,short或char,運算結果提升為int類型
  • 對與二元操作符來說,提升規(guī)則是從以下幾條依次選擇一條執(zhí)行
  • 如果操作數(shù)類型均為byte、short或char,那么兩個數(shù)均轉為int類型,結果數(shù)也將為int類型
  • 如果操作數(shù)包含double類型,那么另一個操作數(shù)也轉為double,結果數(shù)也將為double類型
  • 如果操作數(shù)包含float類型,那么另一個操作數(shù)也轉為float,結果數(shù)也將為float類型
  • 如果操作數(shù)包含long類型,那么另一個操作數(shù)也轉為long,結果數(shù)也將為long類型
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI