Primitive Data Type - PsMonkey 隨手筆記
文章推薦指數: 80 %
在Java 當中內建好的資料型態(primitive data type)有下列幾種: ... 既然每種不同資料型態有不同的範圍,而Java 又是一種Strong Type 的語言,所以下面這個程式的 ...
PsMonkey隨手筆記搜尋這個協作平台
Java>
PrimitiveDataType
在程式中,我們需要去紀錄一些數值、資料,或是表示某些狀態,而在程式語言中負責這樣子的東西,我們稱之為變數。
用較「專業」的說法,就是程式在執行時,會在記憶體裡頭空出一些空間,用來存放資料以便程式能夠運作。
既然扯到記憶體,就理所當然的會扯到資料型態(datatype)以及資料表示法。
在Java當中內建好的資料型態(primitivedatatype)有下列幾種:
資料型態
記憶體中的bit量
範圍
boolean
8
true,false(只有兩個)
char
16
'\u0000'~'\uffff'(Unicode字集)
byte
8
整數:-128~127
short
16
整數:-32768~32767
int
32
整數:-2147483648~2147483647
long
64
-9223372036854775808~9223372036854775807
float[註1]
32
±1.4E-45~±3.4028235E+38
double
64
±4.9E-324~±1.79769313486231570E+308
這種顏色欄位的資料型態都是整數,差別在於範圍的大小;同樣的,這種顏色欄位的資料型態都是可以帶有小數點的實數,差別在於範圍的大小。
如果你的計算機概論學的還不錯,那整數的部分只要記得需要的bit數就可以了,後頭的範圍自然很容易推的出來。
至於實數...誰管它什麼範圍...(不要叫我背or算:P),不過要這裡提一下,以float為例,「±1.4E-45~±3.4028235E+38」的意思是「1.4E-45~3.4028235E+38」以及「-1.4E-45~-3.4028235E+38」兩個範圍的聯集,這邊只是偷懶的縮寫,相信記算機概論學過的都知道為什麼是這樣,忘記的就快快去翻書吧~ccc
既然每種不同資料型態有不同的範圍,而Java又是一種StrongType的語言,所以下面這個程式的錯誤就一定要避免囉:
classerror1{
publicstaticvoidmain(Stringargs[]){
shortx_short;
intx_int=5;
x_short=x_int;
System.out.println(x_short);
}//endofmain()
}//endofclasserror1
在compile的時候就會出現錯誤,告訴你compiler沒有辦法把int轉換成short。
遇到這種情形,你只要這樣子改就沒問題了:
classamend_error1{
publicstaticvoidmain(Stringargs[]){
shortx_short;
intx_int=5;
x_short=(short)x_int;
System.out.println(x_short);
}//endofmain()
}//endofclassamend_error1
(short)會幫你把x_int的數值強制轉換成short的格式。
當然,明明short的資料型態最大只能到32767,你要把一個在short範圍以外的值硬是轉換成short的格式,可就不要期望出來的結果是你想要的:
classerror2{
publicstaticvoidmain(Stringargs[]){
shortx_short;
intx_int=40000;
x_short=(short)x_int;
System.out.println(x_short);
}//endofmain()
}//endofclasserror2
這個程式在compile以及執行的時候都不會有問題,但是output的值是-25536。
由此觀之,為了程式的堅固耐用,還是不要隨意使用「(short)」這類的指令。
其實,Java並沒有很徹底的StrongType,因為不是所有不同資料型態的變數扯在一起就會出問題,以下提供一個小小表格,給大家參考著用:
byte
short
char
int
long
float
double
byte
Y
C
Y
Y
Y
Y
short
C
C
Y
Y
Y
Y
char
C
C
Y
Y
Y
Y
int
C
C
C
Y
Y*
Y
long
C
C
C
C
Y*
Y*
float
C
C
C
C
C
C
double
C
C
C
C
C
C
C表示需要加入強制轉換的指令,才能正常運作。
Y表示JAVA會幫你作轉換的動作。
Y*跟Y的差別:JAVA不保證轉換後數值的精準度(因為資料儲存方式的關係)。
我們大致上可以歸類出一個結論:在Java中,如果(資料型態)範圍比較小的變數可以把值存入(資料型態)範圍比較大的變數、(資料型態)沒有小數點的變數可以把值存入(資料型態)有小數點的變數,而不需要在程式碼中加入轉換的指令(忽略Y*的精準度問題);反之,則需要經過轉換的過程,因為資料型態不同的關係,轉換完之後的值可能完全偏差掉。
另外,Java還有一個特別的地方。
如果你把一堆變數作算術運算、遞加遞減、bitwise運算,只要這堆變數當中,有一個以上是〔double〕型態,那整個式子最後的運算結果的傳回值也會是〔double〕型態,「〔〕」中型態辨別的依序是double→float→long;最後,如果式子當中沒有上面三種資料型態的變數,那麼「傳回值的資料型態就會是int」。
請特別注意這點,傳回值只會有這四種資料型態,即使你是把一堆char、byte、short變數下去運算,傳回值還是int的型態[註2]。
請看下面這個程式範例:
classerror3{
publicstaticvoidmain(Stringargs[]){
bytea,c=3,b=10,d=-5;
a=b+c-d;
System.out.println(a);
}//endofmain()
}//endofclasserror3
這個程式在compiler的時候,會出現這樣子的錯誤訊息:
C:\programs\Java>javacerror3.java
error3.java:5:Incompatibletypefor=.Explicitcastneededtoconvertinttobyte.
a=b+c-d;
^
1error
所以,在這裡請特別注意喔~
[註1]這裡的數據跟數值表示方都是取自於O'REILLY出版的第三版《JAVA技術手冊》p.28頁。
但是在float的地方出了一點問題,因為上頭寫的數據跟俗稱「綠色螞蟻書」的《JAVAHOWTOPROGRAM3rdEdition》(由PRENTICEHALL出版,DEITEL系列)p.144所寫的不同。
在沒有旺盛的好奇心去查詢IEEE754的規格orSUN網站的資料,這裡採用JAVA技術手冊的資料,原因無他,因為這本書有標明underflow的上下界,而另一本書沒有。
特別在此註明一下,以示負責。
[註2]這裡不考慮boolean型態。
Comments
瀏覽MyPortfolio軍旅生涯紀錄2010.11.122010.11.192010.11.262010.12.102010.12.242011.01.072011.02.262011.03.252011.05.202011.07.01AppEngineGPEobjectifyCSSGoogleGoogleSite技巧JavaArrays.sort()PrimitiveDataTypeSimpleDateFormat泛型用法memo雜項筆記Java3rdLib.iTextJS程式設計師參考書CH02:Browser中的JSCH13:DOM《拉奧孔》前言作品更新紀錄便當狗亂數圖片展示牆2012.01.282012.01.302012.02.022012.02.04對戰電腦版踩地雷2010.08.232010.08.262010.08.26-22010.09.022010.09.102010.09.182010.09.212010.09.222010.09.29[戰績]2010.09.29單天[戰績]2010.09.29~?[戰績]~2010.09.2312:00訪客影像2011.10.10城邦暴力團人物表地圖年表書目待處理清單書讀山文章我來,我見,我征服!無處正中運動生理學麻辣功夫王AIKI協作平台地圖最新協作平台活動
最近的協作平台活動讀山編輯者PsMonkeyobjectify編輯者PsMonkey讀山編輯者PsMonkeyAppEngine編輯者PsMonkey書由PsMonkey新增的項目ViewAll
Signin|RecentSiteActivity|ReportAbuse|PrintPage|PoweredByGoogleSites
延伸文章資訊
- 1Java 基本資料型類別(primitive type)和外包類別(wrapper classes)
基本資料型類別(primitive type),又稱為工具類別,例如char, int等,和外包類別(wrapper classes) Character, Integer是有分別的。 錯誤示範:
- 2Primitive Data Types - Java Tutorials - Oracle Help Center
Primitive Data Types · byte: The byte data type is an 8-bit signed two's complement integer. · sh...
- 3Java 入門指南- 單元3 - 基本資料型態與參考 - 程式語言教學誌
Java 中的變數(variable) 有兩種,一種是基本資料型態(primitive data type) ,另一種則是對物件(object) 的參考(reference). variable...
- 4Primitive Data Type - PsMonkey 隨手筆記
在Java 當中內建好的資料型態(primitive data type)有下列幾種: ... 既然每種不同資料型態有不同的範圍,而Java 又是一種Strong Type 的語言,所以下面這個...
- 5Java Data Types - W3Schools
A primitive data type specifies the size and type of variable values, and it has no additional me...