Java通過哪些機制處理數據(2)-數據類型

一、數據類型

(1)數據類型概述

(a)數據類型有什麼用?

數據類型用來聲明變量,程序在運行過程彙總根據不同的數據類型分配不同大小的空間。

Int I =10;

Double d =1.23;

i變量d變量類型不同,空間大小不同。

(b)數據類型的分類:

第一種:基本數據類型

基本數據類型又可以劃分爲4大類8小種:

第一類:整數型,第二類:浮點型,第三類:布爾型,第四類:字符型

8小種:(小寫)

Byte,short,int,long,Float,double,Boolean,char

第二種:引用數據類型

字符串型String屬於引用數據類型。

String字符串不屬於基本數據類型範疇。

java中除了基本數據類型外,剩下的都是引用數據類型。

(c)8種基本數據類型中(計算機存儲單位)

整數型:byte short int long有什麼區別?

浮點型:float和double有什麼區別?

區別:佔用的空間大小不同。

(d)關於計算機存儲單位?

計算機只能識別二進制。(1001)

1字節=8比特(bit)

1bit就是一個1或0

Byte short int long分別佔用的空間大小爲

1    2      4   8

Float double boolean char

4       8     1        2

(e) byte類型的取值範圍?

byte是[-128 ~127]共,可以表示256個不同的數字。

byte類型的最大值是怎麼計算出來的?

byte是1個字節,是8個比特位,所以byte可以存儲的最大值是:

01111111

二進制最前面的是代表符號位,0代表正數。1代表負數。

2的7次方-1就是byte的最大值128-1=127

Byte:[-128 ~127]

Short:[-32768~32767]可以表示65536個不同的數字

Int:[-2147483648~2147483647]

Char:[0~65535]可以表示65536個不同的數字

short和char實際上容量相同,不過char可以表示更大的數字。

因爲char表示的是文字,文字沒有正負之分,所以char可以表示更大的數字。

(f)字符編碼:

其中byte,short,int long, float,double,boolean這7種數據類型在計算中容易表示,

但是char類型,因爲是各個國家的文字,沒有辦法直接轉換成二進制,所以就想到了“字符編碼”通過每個文字,對應一個二進制。最先是英文(ASCII)

'a'--(採用ASCII碼進行編碼)->01100001

01100001 --(採用ASCII碼進行解碼)->'a'

如果編碼和解碼採用的不是同一個編碼方式,會出現亂碼。

97(十進制)

在java中,java語言爲了實現全球的文字,所以採取了unicode編碼的方式。

具體實現:UTF-8 UTF-16 UTF-32 …

Char='ab'//這樣是錯誤的。

(2)轉義字符

Char c1 = '\t';

正常的情況下,它應該報錯,但是它通過了,說明它不是字符串,它是單個字符。

所以它表示“製表符tab"

(1)java語言中\負責轉義,\t表示製表符tab

 

(2)\n表示換行符

(3)如果想在控制檯上輸出\怎麼辦?

System.out.println('\');

//加入兩個反斜槓,代表一個普通的\

System.out.println('\\’);

// \'表示一個普通的'的單引號字符。

System.out..println('\'');

//這樣就輸出了'

(4)\u表示後面的是Unicode編碼 

(3)自動類型轉換

在java早上有一條非常重要的結論:

在任何情況下,整數型的“字面量/數據"默認被當做Int類型處理。

如果希望該“整數型字面量”被當做Long類型來處理,需要在“字面量”後面添加L/l

建議使用大寫L,因爲小寫l和1分不清。

//分析一下是否存在類型轉換?

//200這個字面量 是默認的int類型,int佔有4,long佔有8個

//小容量可以自動轉換成大容量,這種操作被稱爲:自動類型轉換。

Long b =200;

//這種不存在自動類型轉換,就是賦值。

Long c = 300L;

Long a = 2147483647;

Long d = 2147483648;

//a會通過,但是d通過不了,會報數字太大,解決方法在後面加L

Long d = 2147483648L;

以上是自動類型轉換(小容量可以自動賦值給大容量)

(4)強制類型轉換

從大類型到小類型,可能存在損失。

 

那麼怎麼轉換呢?要想編譯通過,必須加強制類型轉換符,進行強制類型轉換。

當然也有可能損失精度。

Int smallA = (int) bigA;

這樣編譯就可以通過了,但是運行可能存在損失精度。

java中有一個語句規則:

當這個整數型字面量沒有超出byte的取值範圍,那麼這個整數型字面量可以直接複製給byte類型的變量。

主要是方便寫代碼

Byte x =1;

Byte y =127;

Byte z =(byte)128;

(5)char

(1)整數能否直接賦值給char

 

 

1、兩個都輸出英文字母a,所以如果char後面有數字,java語句是允許的,並且java輸出英文字母,當int賦值char時,會產生自動類型轉換。

2、char類型取值範圍是0~65535

當char c1 = 65536時,會報錯。

3、當一個整數沒有超出byte,short,char時的取值範圍的時候,可以直接賦值給他們,不用強轉。

(6)Byte short char混合運算

char、byte、short做混合運算的時候,各自先轉換成Iint再做運算。

Char c1='a';

Byte b =1;

Short s = c1+b ;//這時候會報錯,編譯器不知道這個加法最後的結果是多少,只知道Int類型。

Short s = 98;//這樣可以。

Short s =(short)(c1+b);

(7)多種數據類型混合運算

多種數據類型做混合運算的時候,最終的結果是“最大容量"對應的類型。

Char + short + byte 這個除外。

因爲char + short + byte混合運算的時候,會自動轉換成Int。

Long a = 10L;

Char c = 'a';

Short s =100;

Int I = 30;
//求和

System.out.println(a+c+s+i);//237

Int x =a+c+s+i//會報錯誤

Int x = (int)(a+c+s+i);

//java中規定,int類型和int類型最終的結果還是int類型

Int temp = 10/3

System.out.println(temp);//結果是3

(8)浮點型數據

關於java語言中的浮點型數據

浮點型包括:

Float 4個字節    單精度

Double 8個字節 雙精度

財務軟件用的是java.math.BigDecimal(這種不屬於基本數據類型,這是引用數據類型)。

float和double存儲數據的時候都是存儲的近似值。

爲什麼?

因爲現實世界中有這種無線循環的數據,例如:3.3333333

數據實際上是無限循環,但是計算機的內存有限,用一個有限的資源表示無限的數據,只能存儲近似值。

long類型佔用8個字節。

float類型佔用4個字節。

那個容量大?

注意:任意一個浮點型都比整數型空間大。

float容量>Long容量。

java中規定,任何一個浮點型數據默認被當做double來處理,如果想讓這個浮點型字面量被當做float來處理,那麼,請在後面添加F/f

1.0 默認當做double類型來處理。

1.0F 這纔是float類型

(9)布爾型數據

1、在java語言中boolean類型只有兩個值,沒有其他值。

true和false。

不像C或者C++,C語言中1和0也可以代表布爾類型。

2、boolean類型,在實際開發中使用在哪裏呢?

使用在邏輯判斷當中,通常放到條件的位置上。(充當條件)

(10)總結:在基本類型轉換需要遵循的規則

1、八種數據類型中,除boolean類型不能轉換外,其他類型均可轉換。

2、如果整數型字面量沒有超出byte,short,  char的取值範圍,均可直接將其賦值給byte,short ,char類型的變量。

3、小容量向大容量轉換爲自動類型轉換,容量從小大到達的排序:

Byte<short(char)<int <long <float<double。

4、大容量轉換爲小容量,稱爲強制類型轉換,編寫的時候,必須添加“強制類型轉換符".

5、byte,short,char類型混合運算時,先各自轉換成int類型再做運算。

6、多種數據類型混合運算,各自先轉換成容量最大的哪一種再做運算。

總結:我們生活中可能會各種各樣的數據,比方說,我買了1瓶水,你是個好人,這是對的,各個國家有各個國家的文字,等等,那麼怎麼在計算機上去表示這些現實生活中的事物呢,在JAVA中它就用到了數據類型,通過不同的數據類型,在計算機內存中開闢的空間也是不一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章