5 基本資料型別(Primitive Types)
Java是屬於強型別(Strongly typed)程式語言,必須明確宣告變數型別才可使用,Visual Basic則屬於弱型別(Weakly typed)程式語言。Java的基本資料型別皆屬於實值型別。
基本資料型別可分為字元(Characters)、整數(Integers)、浮點數(Floating Point Numbers)、與布林值(Booleans)四類,並可再細分為八種資料型態,都有其固定長度。
資料型別 |
資料型態 |
位元組 |
位元 |
最小值 |
最大值 |
初期值 |
字元 |
char |
2 |
16 |
0 |
216-1 |
‘\u0000’ |
整數 |
byte |
1 |
8 |
-27 |
27-1 |
0 |
short |
2 |
16 |
-215 |
215-1 |
0 |
|
int |
4 |
32 |
-231 |
231-1 |
0 |
|
long |
8 |
64 |
-263 |
263-1 |
0L(0l) |
|
浮點數 |
float |
4 |
32 |
不計 |
不計 |
0.0F(0.0f) |
double |
8 |
64 |
不計 |
不計 |
0.0 |
|
布林值 |
boolean |
1 |
8 |
false |
true |
false |
※參考資料型別的String型別初期值為null。
※位元組越大越佔記憶體,沒有必要時儘量使用較少記憶體之資料型別,例如預期資料會落在-128至127間整數時,只要使用佔用1個byte記憶體的byte型別,就不需宣告為占用2個byte以上的short、int、long整數型別。
※只有當變數身份是class內的成員(方法之外)時,宣告時可不給予初期值,Java會預設初期值,區域變數(方法或稱函式內變數)必須自己設定初期值,否則會有編譯錯誤訊息。
基本資料型別適用範圍:存放單一字元時,使用字元資料型別。存放整數數字時,依數字可能大小選擇4種整數資料型別之一。存放真假值時,使用boolean型別。
[5-1字元型別(char)]
字元型別宣告只能針對單一字元,並使用單引號,佔用2個位元組。宣告為字元型別(char)之欄位,不論是以字元、unicode碼或ASCII碼等指定其值,外在顯示時-例如以“System.out.println”列印顯示,一定為“我”、 “I”等之字元,不會顯式unicode、ASCII內碼。
<例>字元型別
class Char1 {
public static void main (String[] args) {
char twobytechar; //宣告字元型別twobytechar
twobytechar = 'I'; //指定字元
System.out.println("英文字母顯示 = "+ twobytechar);
twobytechar = '\u0049'; //指定unicode(查unicode table 16進位碼)
System.out.println("Unicode碼顯示 = "+ twobytechar);
twobytechar = 73; //指定整數(16進位49轉換為10進位之73)
System.out.println("ASCII十進位碼顯示 = "+ twobytechar);
twobytechar = '我';
System.out.println("中文字元顯示 = "+ twobytechar);
twobytechar = '\u6211';
System.out.println("中文Unicode碼顯示 = "+ twobytechar);
twobytechar = 24576;
System.out.println("中文十進位碼顯示 = "+ twobytechar);
twobytechar = '\0'; // \0為空字元表示法
System.out.println("特殊字元之空字元顯示 = "+ twobytechar);
}
}
命令提示字元下輸入:C:\js>java Char1
執行結果:英文字母顯示 = I
Unicode碼顯示 = I
ASCII十進位碼顯示 = I
中文字元顯示 = 我
中文Unicode碼顯示 = 我
中文十進位碼顯示 = 我
特殊字元之空字元顯示 =
※直接以字元顯示為較常用之方式。
※欄位名稱習慣使用小寫字母,例如twobytechar、onebyte,儘可能使用有意義的單字組合。
[5-2位元組整數型別(byte)]
範圍為-128~127。常用於ASCII碼之資料,不得用於中文資料。佔有記憶體1位元組,不論指定何種型式之值,其外在顯示皆為整數。
class Byte1 {
public static void main (String[] args) {
byte eightbits;
eightbits = 73;
System.out.println("數值顯示結果 = "+ eightbits);
eightbits = 'I';
System.out.println("字母I之ASCII十進位碼顯示結果 = "+ eightbits);
eightbits = '\0';
System.out.println("特殊字元之空字元碼顯示結果 = "+ eightbits);
}
}
命令提示字元下輸入:C:\js>java Byte1
執行結果:數值顯示結果 = 73
字母A之ASCII十進位碼顯示結果 = 73
特殊字元之空字元碼顯示結果 = 0
[Java常用特殊字元]
字元值 |
字元 |
說明 |
字元值 |
字元 |
說明 |
0 |
\0 |
空字元 |
12 |
\f |
換頁 |
7 |
\a |
鈴聲 |
13 |
\r |
如Enter鍵 |
8 |
\b |
如Backspace鍵 |
34 |
\” |
雙引號 |
9 |
\t |
如Tab鍵 |
39 |
\’ |
單引號 |
10 |
\n |
換行 |
92 |
\\ |
右斜線 |
<例>使用System.out.print換行時可用下列方式,本例為列印顯示宋詞:「浣溪紗」
class CarriageReturn{
public static void main(String[] args){
char cr = 10; //非位元,字元10代表換行
char spacechar = 0;
String poemheader = "北宋晏殊浣溪紗";
String poembody1 = "一曲新詞酒一杯";
String poembody2 = "去年天氣舊亭台";
String poembody3 = "夕陽西下幾時回";
String poembody4 = "無可奈何花落去";
String poembody5 = "似曾相識燕歸來";
String poembody6 = "小園香徑獨徘徊";
System.out.println(poemheader);
System.out.println(spacechar);
System.out.print(poembody1 + "\n");
System.out.print(poembody2 + cr);
System.out.print(poembody3 + cr);
System.out.print(poembody4 + "\n");
System.out.print(poembody5 + cr);
System.out.println(poembody6);
}
}
命令提示字元下輸入:C:\js>java CarriageReturn (記得要先編譯)
執行結果:北宋晏殊浣溪紗
一曲新詞酒一杯
去年天氣舊亭台
夕陽西下幾時回
無可奈何花落去
似曾相識燕歸來
小園香徑獨徘徊
※請讀者自行改編程式而達成同樣效果。
[5-3短整數型別(short)]
佔有記憶體2個位元組,不論指定何種型式之值,其外在顯示皆為整數。
class TooShort1{
public static void main (String[] args) {
short veryshort;
veryshort = 65;
System.out.println("一般數值外在顯示 = "+veryshort);
veryshortt = 'C';
System.out.println("字母C之ASCII十進位碼外在顯示 = "+veryshort);
veryshort = '台';
System.out.println("中文字元的「台」之十進位碼外在顯示 = "+veryshort);
veryshort = '\0';
System.out.println("特殊字元之空字元碼外在顯示 = "+veryshort);
}
}
命令提示字元下輸入:C:\js>java TooShort1
執行結果:一般數值外在顯示 = 65
字母C之ASCII十進位碼外在顯示 = 67
中文字元的「台」之十進位碼外在顯示 = 21488
特殊字元之空字元碼外在顯示 = 0
[5-4整數型別(int)]
使用關鍵字int進行宣告,佔有記憶體4位元組,不論指定何種型式之值,其外在顯示皆為整數。
class Integer1 {
public static void main (String[] args) {
int myinteger;
myinteger = 65;
System.out.println("一般數值顯示 = "+ myinteger);
myinteger = 'A';
System.out.println("英文字母顯示 = "+ myinteger);
myinteger = '中';
System.out.println("中文字元顯示 = "+ myinteger);
myinteger = '\u4E2D';
System.out.println("Unicode顯示 = "+ myinteger);
myinteger = 047055;
System.out.println("八進位顯示 = "+ myinteger);
myinteger = 0x4E2D;
System.out.println("十六進位顯示 = "+ myinteger);
myinteger = '\0';
System.out.println("特殊字元顯示 = "+ myinteger); } }
命令提示字元下輸入:C:\js>java Integer1
執行結果:一般數值顯示 = 65
英文字母顯示 = 65
中文字元顯示 = 20013
Unicode顯示 = 20013
八進位顯示 = 20013
十六進位顯示 = 20013
特殊字元顯示 = 0
[5-5長整數型別(long)]
長整數宣告指定值時,必須於整數之後附加“L”或“l”。
佔有記憶體8位元組,不論指定何種型式之值,其外在顯示皆為整數。
class Verylong1 {
public static void main (String[] args) {
long ll;
ll = 100L;
ll = 0xABCDEF987L;
System.out.println("長整數之值 = "+ll);
}
}
命令提示字元下輸入:C:\js>java Verylong1
執行結果:長整數之值 = 46118402439
※各整數型別之指定運算皆以指定10進位整數值為常見。
[5-6浮點數型別(float/double)]
單精確度浮點數:使用關鍵字float宣告,指定值時必須於數字之後附加“F”或“f”。佔有記憶體4位元組。
倍精確度浮點數:使用關鍵字double宣告,指定值時於數字之後可不附加任何字元。佔有記憶體8位元組,其外在顯示為帶有小數之數字。倍精確度浮點數可較單精確度浮點數儲存更大之數字。
單、倍精確度浮點數不論指定何種型式之值,其外在顯示為帶有小數之數字。
class Nature1 {
public static void main (String[] args) {
float singlep;
singlep = 111.99f;
System.out.println("float數值 = "+ singlep);
singlep = 1.1199E2f;
System.out.println("float數值 = "+ singlep);
singlep = 11199E-2f;
System.out.println("float數值 = "+ singlep);
double doublep;
doublep = 111.99;
System.out.println("double數值 = "+ doublep);
doublep = 1.1199E2;
System.out.println("double數值 = "+ doublep);
doublep = 111990E-3;
System.out.println("double數值 = "+ doublep); } }
命令提示字元下輸入:C:\js>java Nature1
執行結果:float數值 = 111.99
float數值 = 111.99
float數值 = 111.99
double數值 = 111.99
double數值 = 111.99
double數值 = 111.99
備註:指數E之表示法
格式:數字E[-]正整數
1.1199E2=1.1199*102=111.99
11199E-2=11199*(1/10)2=111.99
111990E-3=111990*(1/10)3=111.99
[5-7布林值型別(boolean)]
宣告布林值的關鍵字為boolean,布林值只能為“true”或“false”。
class Boolean1 {
public static void main (String[] args) {
boolean tf1;
tf1 = true;
System.out.println("布林值 = "+tf1);
tf1 = false;
System.out.println("布林值 = "+tf1);
}
}
命令提示字元下輸入:C:\js>java Boolean1
執行結果:布林值 = true
布林值 = false
留言列表