目錄表

國立屏東大學 資訊工程學系 物件導向程式設計

5. Data Types, Variables and Constants


5.1 Primitive Types

table 1彙整了java語言支援的primitive types與其記憶體空間大小、數值範圍和預設值。與C語言不同,java語言是在Virtual Machine上執行的,所以資料型態在不同平台上的大小皆相同。

Type Size Range Default
boolean 1 bit true or false false
byte 8 bits -128 ~ 127 0
short 16 bits -32768 ~ 32767 0
char 16 bits \u0000 ~ \uffff or 0~65535 \u0000
int 32 bits -2147483648 ~ 2147483647 0
long 64 bits <latex>-2{63}</latex> ~ <latex>2{63}-1</latex> 0
float 32 bits 32 bits IEEE 754 floating point 0.0
double 64 bits 64 bits IEEE 754 floating point 0.0
Tab. 1: Java Primitive Types

5.1.1 整數型態/Integer Types

顧名思義,整數型態就是用以表示整數的資料。Java語言中的整數型態,以integer的前三個字母int表示,唸做int或是integer都可。一個int佔記憶體32bits,其中最左邊的bit代表正負數 – 0代表正整數或0,1代表負整數。以32bits為例,最大的正整數為<latex>(0111 1111 1111 1111 1111 1111 1111 1111)_2=2,147,483,647</latex>,也就是<latex>$2^{31}$-1</latex>;至於最小的負數並不是<latex>(1111 1111 1111 1111 1111 1111 1111 1111)$_2$= -2,147,483,647</latex>,而是<latex>(1000 0000 0000 0000 0000 0000 0000 0000)$_2$</latex>,其值為<latex>-2,147,483,648=- 2^{32}</latex>。

Java語言還提供另外三種整數型態:byte、short與long,分別佔用不同大小的記憶體空間。其中byte為8 bits、short為16bits,long則為64bits。

5.1.1.1 整數數值的表達

除了宣告變數為某種型態外,我們也可以直接在程式碼中使用整數數值。整數數值可依其所使用的進位系統分成十進制(decimal, base 10)、二進制(binary, base 2)、八進制(octal, base 8)與十六進制(hexadecimal, base 16)等四種表示法。

我們還可以在數值後面加上L或l,強制該數值為long型態,例如:13L, 376l, 0374L, 0x3ab3L, 0xffffffL, 03273L等皆屬之。

5.1.2 浮點數型態/Floating Types

顧名思義,浮點數型態就是用以表示小數的資料。Java語言中有2種符點數的型態:float與double,分別實作了IEEE 754當中的單精確度與倍精確度:

一般而言,float型態適用於對小數的精確度不特別要求的情況,例如體重計算至小數點後兩位、學期成績計算至小數點後一位等情況。而double則用在重視小數的精確度的場合,例如台幣對美金的匯率、工程或科學方面的應用等。

Java語言以IEEE 754標準實作了float與double,其數值範圍與精確度請參考table 2

Type smallest positive value largest value precision
float/single-precision <latex>$1.17549x10^{-38}$</latex> <latex>$3.40282x10^{38}$</latex> 6 digits
double/double-precision <latex>2.22507×10{-308}</latex> <latex>1.79769×10{308}</latex> 15 digits
Tab. 2: IEEE 754標準的浮點數型態數值範圍與精確度


5.1.2.1 數值的表達

浮點數數值的表達有兩種方式:

Java語言默認的浮點數型態為double,如果您要特別強制一個數值之型態為float,可以在數值後接上一個F或f。例如:3.45f, 3.45e-3f, 1.32e+4F等皆屬之。

5.1.3 字元型態/Character Types

所謂的字元型態就是用以表示文字、符號等資料,在Java語言中只有一種字元型態:

Java語言的char型態之大小為16 bits,採用unicode編碼,可處理範圍含蓋\u0000至\uffff。其實在java語言中,一個char型態的數值就是一個整數,故其範圍又可表達為整數值0~65535。例如'A'的數值為65,'0'為48,'吳'為21555等。

因此,我們可以把char型態的數值當成整數來進行運算,例如:

char c;
int i;
 
i ='a';    // i的值為97
c = 65;    // c的值為'A'
c = (char)(c + 1); // c的值為'B'

5.1.3.1 字元數值的表達

字元數值的表達方法有兩種:

Java語言針對一些特殊字元,提供一組escape sequence,如table 3

Escape Sequence 意義
\b Backspace
\f form feed
\n new line
\r carriage return
\t Horizontal tab
\\
backslash
\' '
\“
Tab. 3: Escape Sequence

除此之外,還可以使用八進制或十六進制來表達字元:

5.1.4 字串/String

所謂的字串是指一些文數字符號的集合,在Java語言中以雙引號加以包裹。例如:“This is a string!”。由於在Java語言中,字串是以類別的方式供我們使用,並不是資料型態的一種,在此不加以說明,細節請參考本書第XX章。

5.2 Variable Declaration

Java是一個「strongly typed」的程式語言,所有變數在使用之前必須宣告其所屬型態,但不強制在程式區塊前宣告,只要在第一次使用前宣告即可,其宣告語法如下:

DataType variableName[=expression][,variableName[=expression]]*;

<note tip> 在上面的語法說明中,「[]」為選擇性的語法單元,其後接續「*」表示該語法單元可出現0次或多次;「?」表示出現0次或1次。另外還有「+」代表1次或多次。本書將使用這種表示法做為語法的說明。 </note>

其中DataType為型態、variableName為變數的名稱,中括號內的部份則是選擇性的(可以有,也可以忽略),為該變數的初始數值。

下面的程式碼片段宣告了一個名為x的整數變數,並且在後續設定其數值為38。

int x;
 
...
 
x=38;

我們也可以將變數宣告與數值給定同時以一行程式碼來完成:

int x=38;

我們也可以同時宣告有多個相同型態的變數,例如下面的程式碼,同時宣告了三個整數變數x、y與z,其中x不指定初始值,y與z的初始值則分別為3與6。要注意的是,我們在兩個變數宣告的中間,是以','加以隔開。

int x, y=3, z=6;

variableName為變數名稱,代表在程式執行階段的某個資料項目,因此建議使用較具意義的變數名稱,才容易理解、提升程式碼的可讀性(readability)。變數的命名規則須符合識別字(identifier)命名規則:

以下是一些正確的變數命名:

x,  _i,   $j,  sum, total, a2d, twoNumbers, averageScore, _name, c1, c0, 成績, english成績

以下則是一些錯誤的變數命名:

3x,  for,   2numbers,  average Score

<note tip>變數名稱、類別名稱、方法名稱等,皆屬於Java語言中的識別字(identifier)。</note>

<note important>

使用中文字為識別字命名

</note>

Java語言是case-sensitive的語言,意即大小寫會被視為不同的字元,因此以下的宣告其變數名稱皆是正確且不相同的:

int JUN, jun, Jun, JUn, JuN, jUn, jUN, juN;

為了讓程式碼的可讀性提升,使用有意義的變數名稱是相當重要的,有時我們甚至會使用一個以上的英文單字為變數命名,此時可以適當地調整大小寫或加上底線,例如下面是正確的宣告:

int bestStudent, BestStudent, best_student;

建議使用良好的命名規則,例如Camel CaseHungarian Notation。目前java程式設計師通常以lower camel case法為變數、屬性、方法及物件命名,使用upper camel case法為類別命名。

<note tip>

Camel Case命名規則

</note>

5.3 Keywords and Reserved Words

Java語言的Keywords與Reserved Words,彙整如table 4table 5

abstract assert boolean break byte case catch char
class continue default do double else enum extends
final finally float for if implements import instanceof
int interface long native new package private protected
public return short static strictfp super switch synchronized
this throw throws transient try void volatile while
Tab. 4: Java Keywords
const false goto null true
Tab. 5: Java Reserved Words

5.4 Constants

在程式碼中,經宣告並給定初始值後,就不再(也不允許)變更其數值的資料,就稱為常數(constant)。Java語言的常數宣告語法如下:

final DataType constantName=value[,constantName=value]*

其實,常數的宣告就如同變數宣告一樣,只要在最前面加上final這個保留字即可,同時所有常數的宣告都必須給定初始值。

<note tip>

Modifier修飾字

</note>