1. 程式人生 > 其它 >Java八大基本型別

Java八大基本型別

Java資料型別基本概念:

資料型別在計算機語言裡面,是對記憶體位置的一個抽象表達方式,可以理解為針對記憶體的一種抽象的表達方式。接觸每種語言的時候,都會存在資料型別的認識,有複雜的、簡單的,各種資料型別都需要在學習初期去了解,Java是強型別語言,所以Java對於資料型別的規範會相對嚴格。資料型別是語言的抽象原子概念,可以說是語言中最基本的單元定義,在Java裡面,本質上講將資料型別分為兩種:基本型別和引用資料型別。

  基本型別:簡單資料型別是不能簡化的、內建的資料型別、由程式語言本身定義,它表示了真實的數字、字元和整數。

  引用資料型別:Java語言本身不支援C++中的結構(struct)或聯合(union)資料型別,它的複合資料型別一般都是通過類或介面進行構造,類提供了捆綁資料和方法的方式,同時可以針對程式外部進行資訊隱藏。


基本資料型別:

型別 描述
byte: Java中最小的資料型別,在記憶體中佔8位(bit),即1個位元組,取值範圍-128~127,預設值0
short: 短整型,在記憶體中佔16位,即2個位元組,取值範圍-32768~32717,預設值0
int: 整型,用於儲存整數,在內在中佔32位,即4個位元組,取值範圍-2147483648~2147483647,預設值0
long: 長整型,在記憶體中佔64位,即8個位元組-263~263-1,預設值0L
float: 浮點型,在記憶體中佔32位,即4個位元組,用於儲存帶小數點的數字(與double的區別在於float型別有效小數點只有6~7位),預設值0
double: 雙精度浮點型,用於儲存帶有小數點的數字,在記憶體中佔64位,即8個位元組,預設值0
char: 字元型,用於儲存單個字元,佔16位,即2個位元組,取值範圍0~65535,預設值為空
boolean: 布林型別,佔1個位元組,用於判斷真或假(僅有兩個值,即true、false),預設值false

Java中的資料型別與記憶體的關係

在Java中,每個存放資料的變數都是有型別的,如:

char ch; float x; int a,b,c;

ch是字元型的,就會分配到2個位元組記憶體。不同型別的變數在記憶體中分配的位元組數不同,同時儲存方式也是不同的。

所以給變數賦值前需要先確定變數的型別,確定了變數的型別,即確定了資料需分配記憶體空間的大小,資料在記憶體的儲存方式。


Java資料型別在記憶體中的儲存:

1)基本資料型別的儲存原理:所有的簡單資料型別不存在“引用”的概念,基本資料型別都是直接儲存在記憶體中的記憶體棧上的,資料本身的值就是儲存在棧空間裡面,而Java語言裡面八種資料型別是這種儲存模型;

2)引用型別的儲存原理:引用型別繼承於Object類(也是引用型別)都是按照Java裡面儲存物件的記憶體模型來進行資料儲存的,使用Java記憶體堆和記憶體棧來進行這種型別的資料儲存,簡單地講,“引用”是儲存在有序的記憶體棧上的,而物件本身的值儲存在記憶體堆上的;

區別:基本資料型別和引用型別的區別主要在於基本資料型別是分配在棧上的,而引用型別是分配在堆上的(需要java中的棧、堆概念),

基本型別和引用型別的記憶體模型本質上是不一樣的。

例1:我們分析一下”==“和equals()的區別。

首先,我定以兩個String物件

Stringa="abc";

Stringb="abc";

然後

if(a==b){

System.out.println("a==b");

}else{

System.out.println("a!=b");}

程式輸出a!=b

原因:a和b的地址是不相同的,a==b比較的是兩個變數的地址

例2:定義兩個基本型別

int a=4;

int b=4;

if(a==b){System.out.println("a==b");}

else

{System.out.println("a!=b");}

輸出:a==b

原因:==比較的是兩個變數的內容

猜想:不論是基本資料型別還是引用型別,他們都會先在棧中分配一塊記憶體,對於基本型別來說,這塊區域包含的是基本型別的內容;而對於物件型別來說,這塊區域包含的是指向真正內容的指標,真正的內容被手動的分配在堆上。


Java基本型別取值範圍計算

從計算機組成原理的角度可以解釋:

byte在計算機中是佔8個位元組的,而且byte 是有符號整形,用二進位制表示時候最高位為符號位 0代表正數 1代表負數。

最大值:127 即2的7次方減去1;最小值:即2的7次前面加個負符號:-128 。(包含開始,不包含結尾);

正數在計算機中是以原碼形式存在的;

負數在計算機中是以其補碼形式存在的,就是負數的絕對值的原碼轉為二進位制再按位取反後加1。

下邊這個10和-10為例來介紹的 :10原碼:00001010 它在計算機中的儲存就是 0000 1010,-10 按照前面說的算除其絕對值為10,轉為二進位制 0000 1010 按位取反 1111 0101 再加1後:1111 0110,此為-10補碼,好的,計算機中的1111 0110就是代表-10了。

我們來看 -128 絕對值128的二進位制表示:1000 0000 按位取反 0111 1111 加1後:1000 0000,也就是說 -128在計算機中的表示就是 1000 0000 了,再來看一下-129 在計算機中的表示,絕對值129的範圍已經超出了了byte的位數。所以要注意這類問題;