2.2 常量、變量與基本數據類型
Java語言程序設計中的數據有類型之分。每種數據類型的數據具有各自不同的存儲格式、取值范圍及運算方式。Java中的基本數據類型分為三大類:布爾型、字符型和數值型,其中數值型又包含整型和浮點型。我們在編寫程序時,應根據需要,選擇合適的數據類型來表示數據。
程序處理的數據可以是常量,也可以是變量。程序運行過程中,常量的值不可以發生變化,而變量的值可以被改變。不管常量還是變量,都有確定的數據類型,常量的數據類型取決于書寫形式,變量的類型則要在變量使用之前,通過變量聲明來指定。
2.2.1 基本數據類型
如表2-2所示,Java語言有8種基本數據類型,常常被劃分為整型、浮點型、字符型、布爾型四大類。每種數據類型在取值范圍、運算規則與表示精度方面有各自的特征。在編寫程序時,一般根據不同的需求選擇不同的數據類型。
表2-2 基本數據類型

1.整型
Java語言中的整型具體分為4種:字節型(byte)、短整型(short)、普通整型(int)、長整型(long),如表2-3所示。從byte,short,int到long,對應數據在內存中占用的存儲空間越來越大,表示數據的范圍也越來越大。
表2-3 整型數據占用空間與取值范圍

最常用的整型是int,但有些數據可能超出了int的表示能力,就需要借助long型來表示。例如,全球人口大約為74.5億,這個數值超出了int型所能表示的最大數值(231?1= 2147483647)。如果要表示比較小的數據,同時數據量大且希望控制存儲空間的總量,可以考慮使用short類型和byte類型。
2.浮點型
浮點型也就是實型,用于表示實數。Java中的浮點型有兩種,單精度浮點型(float)和雙精度浮點型(double)。計算機用一定長度的二進制串來表示實數,其精度和表示范圍必然也是有限的,也就是說,包括十進制數0.1在內的許多實數是無法用二進制形式準確表示的。
表2-4給出了double和float兩種類型的數據所占用的空間和取值范圍。double類型比float類型具有更高的精度和更大的取值范圍,同時占用更多的存儲空間。精度用有效數字位數來表示,對于double型數據,其十進制形式的左邊15位是準確的,后面則是不可靠的,對于float型數據,只有左邊6位是準確的,后面是不可靠的。
表2-4 浮點型數據占用空間和取值范圍

一般情況下,建議使用double類型來表示實數。如果在表示大量實數時,有控制存儲空間總量的需求,在精度和范圍允許的情況下,可以選擇使用float類型。
3.字符型
Java用字符型(char)來表示單個字母、數字字符、標點符號及其他特殊字符。計算機內部采用編碼的方式表示字符,Java語言使用編碼方案Unicode碼。每個字符型數據一般占用2字節,也就是16個二進制位。一個漢字通常也可以表示為一個字符型數據。包含多個字符的姓名、地址等數據稱為一個字符串,字符串的表示超出了Java基本數據類型的范疇,需要引入其他方式來表示。
4.布爾型
布爾型(boolean)又稱邏輯類型,用于表示“真”或“假”狀態的數據類型,對應兩種取值:true和false。在后續章節,我們將學習分支和循環語句,其中表示條件的表達式都是布爾型的數據。
2.2.2 常量
顧名思義,常量有一個具體而明確的值,在程序執行過程中,不可能發生變化。程序中的每個常量同樣有具體而確定的類型,這完全取決于常量的書寫形式。
先來看一下各種常量各自不同的書寫形式。
1.整型常量
整型常量有4種形式,分別是:十進制、八進制、十六進制、二進制。八進制整型常量以0開頭,十六進制整型常量以0x或者0X開頭,Java7版本新增了對二進制整型常量的支持,二進制整型常量以0b或者0B開頭。
(1)十進制整型常量
十進制整型常量由0~9的數字序列組成,自左向右的第一個數字不可以是0。可以用“+”或“?”表示正數或負數,“+”是可以省略的。
例如,76,?432,+5都是合法的十進制整型常量,而076則不是十進制整型常量,而是八進制整型常量。
(2)八進制整型常量
八進制整型常量由正、負號和0~7組成,第一個數字必須是0。例如,077、0132、?025是八進制整型常量,相當于十進制整型常量63、90和?21,而078是非法的常量,因為其中出現了八進制數的非法數字。
(3)十六進制整型常量
十六進制整型常量由正、負號和0~9、a~f或A~F組成,有前綴0x。例如,0x168、?0xf9是十六進制整型常量,相當于十進制整型常量360、?249。
(4)二進制整型常量
二進制整型常量由正、負號和0、1組成,有前綴0b(或0B)。例如,0b11110、?0b101是二進制整型常量,相當于十進制整型常量30、?5。
任何一個整數都可以用4種形式來表示。例如,15、017、0xF、0B1111的形式不同,但數值是相等的。程序的整型常量通常采用十進制形式,在某些場合下(例如,涉及二進制位操作時),用八進制、十六進制或二進制形式,更加直觀。
我們知道,整型可分為byte、short、int和long。要判斷一個整型常量具體屬于哪一種,首先根據其后的字母后綴判斷,后綴l和L表示long型常量,如?32l、2L。
如果整型常量后沒有出現這樣的后綴,其類型就取決于常量數值的大小,如0、127是byte型,128、32767是short型,32768、2147483647是int型。但2147483648是一個非法的整型常量,超出了int型的表示范圍,需要表示為2147483647L。
2.浮點型常量
浮點型常量有兩種形式,一種是十進制小數形式,另一種是指數形式。
(1)十進制小數形式
十進制小數形式由數字和小數點組成,例如,+10.625、?6.2、0.0、0.666、5467.5都是合法的浮點型常量,?2.、0.0、5.也是合法的浮點型常量。
(2)指數形式
指數形式類似于科學記數法,通常被用來以緊湊的方式表示非常大和非常小的值。它由正、負號、數字和字母e(或E)組成,e是指數的標志,在e的前面要有數據,e之后的指數只能是整數。例如,1625.0可以寫成1.625E3,0.00731可以寫成7.31E?3。而0.2E2.3和E?5是非法的表示形式。
指數形式適用于絕對值非常小或非常大的浮點數值。
浮點型常量默認情況下是double類型,也可以在數字后附加d或D來表示double類型。如果要表示float類型常量,可以在數字后附加F或f。例如,3.14159、3.14159d和3.14159D是double型常量,3.14159f和3.14159F是float型常量。
3.字符型常量
字符型常量是由單引號括起的單個字符,例如,'a','6','M','&','中'。每個字符型常量都使用Unicode編碼,占2字節的內存。字符常量只能是一個字符,如'XY'是非法的。字符常量區分大小寫字母,如'F'和'f'是兩個不同的字符常量。這里的單引號僅起字符常量邊界符的作用,并不是字符常量的一部分。需要注意的是,單引號和雙引號在此是不可混用的,單引號表示一個字符,而雙引號表示包含單個字符的字符串。
有些字符,如換行、退格等,它們無字符表示,需要采用特殊的形式——轉義字符來表示。轉義字符由反斜杠跟上一個字符或數字組成,它把反斜杠后面的字符或數字轉換成別的意義。例如,'\n'表示換行,'\b'表示向后移一個空格。表2-5列出了常見的轉義字符。
表2-5 轉義字符

4.布爾型常量
布爾型常量只有兩個值:true和false。
2.2.3 變量
變量在程序中用于存放數據。每個變量需要一個名字,屬于一個確定的數據類型,占據一定的存儲空間,用來存放數據,這個數據也就是變量的值。在程序運行過程中,變量的值可以改變。
1.變量的聲明
在使用變量之前,必須先聲明其類型。變量聲明的作用是為變量指定一個名字和數據類型。在Java程序中,變量聲明的基本形式是:

例如:

數據類型可以是byte、short、int、char、float、double、boolean等8種基本數據類型。變量名表可以只有一個變量名,也可以包含多個變量名。如果是多個變量名,不同變量名之間用逗號分隔。變量名應該符合標識符的命名規范。
變量聲明表面上只是確定了變量的名稱和變量的數據類型。實際上還明確了變量所需要的存儲空間、變量的取值范圍及變量所能參與的運算。例如,前面定義的weight占4字節,可以存放一個整數(最小?2147483648,最大2147483647),可以參與包括加、減、乘、除在內的整數運算。
一旦定義之后,變量的類型是不能改變的。也就是說,一個變量名被定義之后,在同一個程序塊內,不可以重新定義該變量名。
2.變量的初始化
在聲明變量時,可以對變量進行初始化,也就是給變量設置一個初始值。
例如:

Java語言規定,如果變量從來未被賦值,則不可以執行獲取變量值的操作,否則屬于語法錯誤。也就是說,除對該變量賦值以外,其他操作都是非法操作。
若有上述變量聲明及初始化,那么:
(1)語句“x=a+y”有語法錯誤,因為a未被初始化。
(2)語句“a=x+y”是合法的,實現的功能是把x和y之和賦值給a。
- iOS Game Programming Cookbook
- Microsoft Exchange Server PowerShell Cookbook(Third Edition)
- Java EE框架整合開發入門到實戰:Spring+Spring MVC+MyBatis(微課版)
- 單片機C語言程序設計實訓100例:基于STC8051+Proteus仿真與實戰
- INSTANT Weka How-to
- Java開發入行真功夫
- Django:Web Development with Python
- VSTO開發入門教程
- Java程序設計與計算思維
- 小程序開發原理與實戰
- RISC-V體系結構編程與實踐(第2版)
- UML 基礎與 Rose 建模案例(第3版)
- Flowable流程引擎實戰
- Mastering Python Design Patterns
- Visual Basic程序設計習題與上機實踐