一、數據類型
(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中它就用到了數據類型,通過不同的數據類型,在計算機內存中開闢的空間也是不一樣的。