2-3
變數型態與宣告
內容:
2-3-1
何謂變數? VIDEO
『變數』( Variables ) 可以想像為某容器的代表名稱 ,容器內『數值』可隨時改變,因而稱之。一般程式運作時,大多是處理變數之間內容的運算、遷移、複製、集合或排列等等,簡單的說,程式運作是離不開變數處理的。變數之間內容處理的現象,與一般數學演算至為相似,早期『計算機』( Computer )就是依照這個概念發展而來的。
其實『變數』即是電腦的某一記憶體空間,我們將這空間取一個比較容易有意義的名稱,此即是『變數名稱』( Variable
name ) 。另一方面,除了希望記憶體空間能夠充分使用外,也期望不要浪費
CPU
處理時間,因此依照變數可能存放的內容,限制其空間大小。我們則將可能儲存的資料內容,區分為若干個型態,稱之為『資料型態』( Data
type ) ;並規劃各種資料型態可能佔用的記憶體空間,也限制了某一資料型態可能表示『數值』( Value )的範圍。
2-3-2
變數的特性 VIDEO
變數是存放數值的容器,但它的內容僅能被『存放』(或稱指定) 與『複製』 ,並沒有『轉移』或『附加』的功能,也不可能出現『淨空』的現象 ,這方面與一般真實環境的容器(如杯子)有很大的不同。簡單的說,變數內一定有數值,而此數值僅能被複製到另一個容器,或被覆蓋成另一個數值,並無法將變數的內容移出成淨空狀態。以下我們依照常用的變數處理動作來介紹其特性如何。
( A ) 變數的宣告產生
一般程式語言皆會規劃幾種變數的資料型態,不同型態可儲存各種專屬資料。譬如,將某一變數宣告成整數型態( Integer,
int ),它僅能存放沒有小數點的資料,雖然有許多不方便,但所占用的記憶體空間小,處理速度較快,某些情況下還是值得的。圖
2-6 為宣告一個整數變數的語法:『 int
a; 』,確實的讀法是『宣告一個名稱為
a
的整數變數』;系統執行該命令時,會由主記憶體內取得一個空間( 4 bytes ),並
a 來代表該記憶體空間的位址。
圖
2-6 變數的宣告產生
( B ) 指定變數內容
指定變數內容的功能是將某一數值存入變數內,無論原來變數內儲放任何數值,都會覆蓋掉,由新的數值取代。指定內容是變數與一般真實環境的容器之間最大的不同點,一般容器允許加入(或稱附加)數值,譬如,原來內如是
3 ,吾人再加入
5 ,使其結果為
8 ;但變數則不然,它沒有附加的功能,原來內容是
3 ,如再加入
5 ,
則原來的 3
將被覆蓋,而由
5 取代其內容。圖
2-7 顯示指定變數內容的功能。
圖
2-7 變數內容的指定
( C ) 宣告變數並指定內容
許多情況可以利用一個敘述句,完成宣告變數與指定內容,如『 int
a=5; 』,確實的讀法是:『宣告一個整數變數,其名稱為
a ,並給予內容
5 』;此敘述的運作,結合了圖
2-6 ( int
a; )與
2-7 ( a=5; )兩只命令。
( D ) 變數內容複製
其實,變數內容是無法移除或附加,僅能被複製或覆蓋。指定變數內容即是覆蓋的意思;但吾人亦可將某一變數的內容複製到另一變數內。圖
2-8 ( int
b=a; )功能是:『宣告一個名稱為
b 的整數變數,並將變數
a 的內容複製到
b 內』,執行該命令後,變數
a 與
b 的內容都是
5 。
圖
2-8 變數內容的複製
( E ) 變數內容的變更
變數內容變更情況如圖
2-9 ( a
= a+10 )所示,功能是『將
a 變數內容複製一份出來,與
10 做相加運算的結果再存入
a 』,如原來
a 的內容是
5 的話,執行該命令後, a
的內容成為
15 。
圖
2-9 變數內容的變更
( F ) 變數之間的運算
圖 2-10
為兩變數之間的運算程序( a
= a + b ),功能是將變數
a 與
b
複製一份出來,兩者相加之後,再將結果回存到 a
內 ;除了加法之外,其他運算器(加、減、乘、除、、)皆如此。如果原來
a 內容為
15 、 b
為 5 ,運算後
a 的內容被變更為
20 ,但
b 還保持原來的
5 。
圖
2-10 變數之間的運算
2-3-3
變數的型態 VIDEO
每只變數都會依照他預計儲存的資料格式,給予特定記憶體空間大小;變數的記憶體空間越大,可以儲存的資料內容也就越多。雖然給予變數較大的記憶體空間,可以預備它儲存較複雜的資料,但如果沒有充分使用,就會浪費空間。因此,我們將程式可能儲存的資料分為幾種型態,產生變數時,就依照這些型態來規劃,則稱為『基本資料型態』。簡單的說,它就是產生變數的格式,基本資料型態所占用記憶體空間,與它可以容納資料量的範圍如表
2-1 所示。
表
2-1 Java
基本資料型態
資料型態
長度
( 位元數 )
範圍
byte
8
-128 ~ 127 (-27 ~ 27 -1)
short
16
-32768 ~ 32767 (-215 ~ 215 -1)
int
32
-2147483648 ~ 2147483647 (-231 ~ 231 -1)
long
64
-9223372036854775808 ~ 9223372036854775807 (-263 ~ 263 -1)
float
32
負值: -3.4028234663852886
x 1038 ~ -1.40129846432481707 x 10-45
正值: 1.40129846432481707
x 10-45 ~ 3.4028234663852886 x 1038
double
64
負值: -1.7976931348623157
x 10308 ~ -4.94065645841246544 x 10-324
正值: 4.94065645841246544
x 10-324 ~1.7976931348623157 x 10308
char
16
ISO
萬用碼
(Unicode)
boolean
不同平台有不同表示方式
String
字串物件
我們可以將表 2-1
變數型態分類如下:
n
整數( byte 、 short 、 int 、 long ): 被宣告成此型態的變數,僅能存放沒有小數點的數值,但允許正數或負數。依照所欲儲存數值的大小可以選擇, byte 、 short 、 int
或
long 。選擇較大者(如
long )可存放較多的數值,但佔用記憶體空間較大, CPU
執行速度較慢;相反的,選擇較小執行速度較快,但存放數值可能超載,到底取哪一樣較恰當,程式設計師可要一使用情況來判斷。
n
浮點數( float 、 double ): 被宣告此型態的變數,可以儲存具有小數點的正或負數值。 Float
型態佔用記憶體空間較小,所能表示範圍較小; Double
具有雙倍記憶體空間,所能表示範圍較大,儲存小數點的位數可以較長,又稱為『雙倍精準度』。
n
字元( char ): 此類變數可儲存經由
ASCII 碼轉換的單一英文字母(如
‘A’ 、 ’B’… 等),轉換表如附錄
A
所示。其實所儲存內容是正整數,也可經由運算得到另一個字元的 ASCII
碼。
n
字串( String ): 此類型變數可以存放經由字碼轉換的一連串中英文文字(如: "
Good Luck To You " 或
" 大家恭喜 " ),英文係利用
ASCII 碼表示,正體中文大多採用
big-5 碼轉換(各系統也許不同)。
n
布林代數( boolean ): 此類型變數僅能儲存『真』( True,
1 )或『假』( false,
0 ),大多使用於邏輯運算,或條件判斷式使用。
2-3-4
變數的宣告 VIDEO
我們可利用 Java
某些關鍵字,來宣告產生變數。宣告變數的關鍵字與資料型態名稱相同,如表 2-1
所示( byte 、 short 、 int 、 float 、 String… 等)。基本上,變數名稱是不受限制的,但還是有下列重點:
Ø
儘量採用有意義的名稱 ,如
data 、 selection 、 cost
等等。
Ø
不可以有特殊符號 ,如
+ 、 - 、 * 、 $ 、 # 、 @ 、 !
等等。
Ø
不限長短,但有分辨大小寫字母 。
Ø
不可使用
Java
保留字 (或稱關鍵字)。
變數宣告語法如下:
1
int a;
宣告產生一個整數變數,其名稱為
a 。
2
int a, b;
宣告產生兩個整數變數
a 與
b 。
3
int count = 10;
宣告整數變數
count ,並給予初值
10 。
4
short sum;
宣告一個短整數,名稱為 sum 。
5
long total=0;
宣告一個長整數變數
total ,並設定初值
0 。
6
float price;
宣告一個浮點數變數
price 。
7
double price;
宣告一個雙倍浮點數
price 。
8
char key ='A' ;
宣告一個字元變數
key ,並給予初值
'A' 。
9
String name = " 您好 ";
宣告字串變數
name ,內容為
" 您好 " 。
10
boolean flag = TRUE ;
宣告布林變數
flag ,並給以『真』( True , 1 )。
11
boolean flag = FALSE ;
宣告布林變數
flag ,並給以『假』( False , 0 )
2-3-5
保留字彙集 VIDEO
表 2-2
為
Java
保留字彙集,每一個保留字都有其特殊用途(爾後會陸續介紹到其功能),不可以作為變數名稱。
表
2-2 Java
保留字彙集
abstract
double
int
strictfp
Do
boolean
else
interface
super
while
break
extends
long
switch
volatile
byte
final
native
synchronized
short
case
finally
new
this
static
catch
float
package
throw
import
char
for
private
throws
instanceof
class
goto
protected
transient
default
const
if
public
try
continue
implements
return
2-3-6
範例研討:各種資料型態輸出 VIDEO
( A ) 程式功能: Ex2_1.java
列印出各種資料型態的數值,並說明變數的功能為何;輸出格式如下:
我是短整數
short count=10 , 可當作計數器
我是整數
int number =20 , 可當整數運算
我是長整數
long value=300 , 可存放較大的整數
我是浮點
float cost=40.2 , 可表存放有小數點數值
我是雙倍浮點
double weight=500.34 , 可存較精密的數值
我是字元
char key=A , 可做字元比較或測試
我是布林
boolean flag=true , 可做事件發生的旗標
我是字串
String name=Tien-Shou Nien , 可當文字串列使用
( B )程式範例:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public
class
Ex2_1 {
public
static
void
main(String[]
args )
{
short
count =10;
System. out .println( " 我是短整數
short count=" + count + "
, 可當作計數器 " );
int
number =20;
System. out .println( " 我是整數
int number =" + number + "
, 可當整數運算 " );
long
value =300;
System. out .println( " 我是長整數
long value=" + value + "
, 可存放較大的整數 " );
float
cost =40.2F;
System. out .println( " 我是浮點
float cost=" + cost + "
, 可表存放有小數點數值 " );
double
weight =500.34;
System. out .println( " 我是雙倍浮點
double weight=" + weight + "
, 可存較精密的數值 " );
char
key = 'A' ;
System. out .println( " 我是字元
char key=" + key + "
, 可做字元比較或測試 " );
boolean
flag = true ;
System. out .println( " 我是布林
boolean flag=" + flag + "
, 可做事件發生的旗標 " );
String
name = "Tien-Shou
Nien" ;
System. out .println( " 我是字串
String name=" + name + "
, 可當文字串列使用 " );
}
}
( C ) 程式重點說明:
n
第
5 行:『 short
count=10; 』。宣告一個名稱為
count 的短整數,並給予初值
10 。
n
第
6 行:『 System.out.println(" 我是短 ….
"+count+" , 可當作計 ….
"); 』。功能是首先印出一串文字(我是短整數 … ),再接著印出
count 變數的內容,最後接著印出下一段文字( ,
可當作計 …. )。
n
第
15 行:『 float
cost=40.2F; 』。宣告一個浮點變數
cost ,並給予初值
40.2F ,後面必須增加一個『 F 』表示浮點數的意思,否則會被認為是雙倍浮點數。
n
第
21 行:『 char
key='A'; 』。宣告一個字元變數
key ,並給予初值
A ,數值僅能一個字元,而且必須用單引號( 'A' )包起來。
n
第
24 行:『 boolean
flag=true; 』。宣告一個布林變數
flag ,並將其設定為『真』( true,
1 )。如設定為『否』,則
flag=false ;但許多情況是利用
1 與
0 來表示真或否。
n
第
27 行:『 String
name="Tien-Shou Nien"; 』。宣告一個字串變數
name ,並給予初值,內容必須利用雙引號包起來( "Tien-Shou
Nien" ),但雙引號內允許空格。