java位宽_Java的数据类型
Java數據類型
Java虛擬機是通過某些數據類型來執行計算的,數據類型及其運算都是由Java虛擬機規范嚴格定義的。
數據類型分為兩種:基本數據類型和引用數據類型。基本類型的變量持有原始值,而引用數據類型的變量持有引用值。
術語“引用值”指的是對某個變量的引用,而不是該對象本身。與此相對的,原始值則是真正的原始數據。
下圖是Java虛擬機中數據類型的描述。
Java語言中的所有基本類型同樣也都是Java虛擬機中的基本數據類型。但是boolean有點特別,雖然Java虛擬機也把boolean看做基本類型,但是指令集對boolean只有很有限的支持。當編譯器吧Java源代碼編譯成字節碼時,他會用int或byte來表示boolean。在java虛擬機中,false是由整數零來表示的,所有非零整數都表示true。涉及boolean值的操作則會用int。另外,boolean數組是當做byte數組來訪問的,但是在“堆”區他也可以被表示為位域。
除了boolean類型外,java語言中的基本類型構成了java虛擬機中的數值類型。
虛擬機中的數值類型分為:整數類型(包括byte,int,long,char)和浮點數類型(包括float,double)。
和java語言一樣,Java虛擬機的基本類型的值在任何地方都是一致的,比如,不管底層的主機平臺是什么,一個long在任何虛擬機中總是一個64為位二進制補碼表示的有符號整數。
java虛擬機中還有一個只在內部使用的基本數據類型:returnAddress,java程序員不能使用這個類型。這個基本類型被用來實現java程序中的finally子句。
java虛擬機的引用類型被統稱為“引用”(reference),有三種引用類型:類類型,接口類型以及數值類型,他們的值都是對動態創建對象的引用。
還有一種特殊的引用值null。他表示該變量沒有引用任何對象。
java虛擬機規范定義了每個數據類型的取值范圍,但是卻沒有定義他們的位寬。存儲這些類型的值所需的占位寬度,是由具體的虛擬機實現的設計者決定的。java虛擬機數據類型的取值范圍如下圖所示:
補充說明
從JDK 5.0開始,Java里面出現了自動拆箱解箱的操作,基于這點需要做一定的說明:
對應原始的數據類型,每種數據類型都存在一個復雜類型的封裝類,分別為Boolean、Short、Float、Double、Byte、Integer、Long、Character,這些類型都是內置的封裝類,這些封裝類(Wrapper)提供了很直觀的方法,針對封裝類需要說明的是,每種封裝類都有一個xxxValue()的方法,通過這種方法可以把它引用的對象里面的值轉化成為原始變量的值,不僅僅如此,每個封裝類都還存在一個valueOf(String)的方法直接把字符串對象轉換為相應的簡單類型。
在JDK 5.0之前,沒有存在自動拆解箱的操作,即Auto Box操作,所以在這之前是不能使用以下方式的賦值代碼的:
Integer a = 0; //這種賦值方式不能夠在JDK 1.4以及以下的JDK編譯器中通過
但是JDK 5.0出現了自動拆解箱的操作,所以在JDK 5.0以上的編譯器中,以上的代碼是可以通過的
Java提供了兩個專門的類進行高精度運算:BigInteger與BigDecimal,雖然Java原始變量都具有對應的封裝類型,但是這兩個變量沒有對應的原始類型,而是通過方法來提供這兩種類型的一些運算,其含義為普通類型能夠做的操作,這兩個類型對應都有,只是因為精度過大可能效率不夠高。至于這兩個類的具體操作可以參考JDK的相關API文檔。
若要求精度的結果,盡量避免使用float和double.
關于基本類型中數值類型的還有一個自動轉換和強制轉換的概念,后續再闡述吧。
字長的考量
java虛擬機中,最基本的數據單元就是字(word),他的大小是由每個虛擬機實現的設計者決定的。jvm規范中明確規定了,字長必須足夠大,至少是一個字單元就足以持有byte、short、int、char、float、returnAddress或者reference類型的值,而兩個字單元就足以持有long或者double類型的值。
因此虛擬機實現的設計者至少得選擇32位作為字長。或者選擇更為高效的字長大小。通常根據底層主機平臺的指針長度來選擇字長。
在Java虛擬機規范中,關于運行時數據區的大部分內容,都是基于“字”這個抽象概念的。比如,關于棧幀的兩個部分-------局部變量和操作數棧------都是按照“字”來定義的。這些內存區域能夠容納任何虛擬機數據類型的值,當把這些值放入局部變量或者操作數棧中時,他將占一個或兩個字單元。
在運行時,Java程序無法偵測到底層虛擬機的字長大小;同樣,虛擬機的字長大小也不會影響程序的行為-------他僅僅是虛擬機實現的內部屬性。
大小: 35.7 KB
大小: 52.4 KB
分享到:
2011-06-21 23:33
瀏覽 1229
評論
總結
以上是生活随笔為你收集整理的java位宽_Java的数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为/高通侧目!苹果自研5G基带成了:郭
- 下一篇: oracle 执行java_oracle