1. java數(shù)據(jù)類型概述
Java語言中的數(shù)據(jù)類型分為兩大類,分別是基本類型和引用類型隘弊。程序中需要處理許多數(shù)據(jù)抛丽,對于不同數(shù)據(jù)都有其對應(yīng)的數(shù)據(jù)類型,其實就是在內(nèi)存中開辟一個存儲空間來存放數(shù)據(jù),不同數(shù)據(jù)所開辟的內(nèi)存大小也會不一樣齐莲。
2. 數(shù)據(jù)存儲的單位
位痢站、字節(jié)、字 是計算機數(shù)據(jù)存儲的單位选酗。位是最小的存儲單位阵难,每一個位存儲一個1位的二進(jìn)制碼,一個字節(jié)由8位組成芒填。而字通常為16呜叫、32或64個位組成。
位(bit):是計算機中最基本的單位殿衰,位是最基本的概念朱庆,在計算機中,由于只有邏輯0和邏輯1的存在闷祥,即每一個邏輯0或者1便是一個位
字節(jié)(byte):計算機中處理數(shù)據(jù)的基本單位娱颊,是由八個位組成的一個單元,8個bit組成1個Byte
字(word):代表計算機處理指令或數(shù)據(jù)的二進(jìn)制數(shù)位數(shù)凯砍,是計算機進(jìn)行數(shù)據(jù)存儲和數(shù)據(jù)處理的運算的單位箱硕,在常見的計算機編碼格式下,一個字等于兩個字節(jié)(十六位)(1word = 2Byte = 16bit)
3. 基本數(shù)據(jù)類型
Java基本類型共有八種悟衩,基本類型可以分為三類剧罩,字符類型char,布爾類型boolean以及數(shù)值類型byte座泳、short惠昔、int、long挑势、float镇防、double。數(shù)值類型又可以分為整數(shù)類型byte薛耻、short营罢、int、long和浮點數(shù)類型float饼齿、double饲漾。JAVA中的數(shù)值類型不存在無符號的,它們的取值范圍是固定的缕溉,不會隨著機器硬件環(huán)境或者操作系統(tǒng)的改變而改變考传。實際上,JAVA中還存在另外一種基本類型void证鸥,它也有對應(yīng)的包裝類 java.lang.Void僚楞,不過我們無法直接對它們進(jìn)行操作勤晚。
3.1 八種數(shù)據(jù)類型
3.2 基本數(shù)據(jù)類型的字節(jié)數(shù)及表示范圍
整型(4個): byte(字節(jié)型)、short(短整型)泉褐、int(整型)赐写、long(長整型)
byte a = 100;
short s = 1000;
int a = 100000;
long a = 100000L;
注. 聲明long類型數(shù)據(jù)的時候,后面需要加L或者l (一般加大寫L)膜赃;
浮點型(2個):float(單精度型/浮點型) 挺邀、double(雙精度型)
float f1 = 1.1f;
double d1 = 1.2;
注.聲明float類型的數(shù)據(jù)的時候加f或者F;
double類型的數(shù)據(jù)的有效位數(shù) 15~16;
3.float類型的數(shù)據(jù)有效位數(shù)是 6~7跳座;
字符(1個): char(字符型)
**注.**聲明char類型的數(shù)據(jù)的時候端铛,使用單引號聲明。并且單引號里面只能放一個元素疲眷;
char name = 'a'
布爾類型:(1個): boolean(布爾類型)
一般用來做邏輯判斷禾蚕,一般用于流程控制,數(shù)據(jù)值只有true或false狂丝,適用于邏輯計算换淆。
4. 包裝類型
Java 是面向?qū)ο蟮恼Z言,但是為了便于開發(fā)者的使用美侦,Java 中卻沿用了 C 語言的基本數(shù)據(jù)類型产舞,在進(jìn)行基本的數(shù)據(jù)計算時,開發(fā)者可以直接使用基礎(chǔ)類菠剩。但是基本數(shù)據(jù)類型是不具備對象的特征的,不能調(diào)用方法耻煤,而且基本數(shù)據(jù)類型不能存入集合中具壮,所以就需要將基礎(chǔ)數(shù)據(jù)類型實例封裝為 Java 對象,使其具有了對象的屬性和方法哈蝇。
4.1 基本類型與包裝類的區(qū)別
存儲位置不同:
基本數(shù)據(jù)類型直接將值放在棧中棺妓;
包裝類型是把對象放在堆中,然后通過對象的引用來調(diào)用他們 炮赦;
初始值不同:
int的初始值為 0 怜跑、 boolean的初始值為false ;
包裝類型的初始值為null 吠勘;
使用方式不同:
基本數(shù)據(jù)類型直接賦值使用就好性芬;
在集合如 coolectionMap 中只能使用包裝類型;
4.2 基本類型與包裝類的相互轉(zhuǎn)換
手動轉(zhuǎn)換
基本數(shù)據(jù)類型 → 包裝類:
通過對應(yīng)包裝類的構(gòu)造方法實現(xiàn)剧防,除了Character外植锉,其他包裝類都可以傳入一個字符串參數(shù)構(gòu)建包裝類對象。
包裝類 → 基本數(shù)據(jù)類型
通過包裝類的實例方法 xxxValue() 實現(xiàn); // xxx表示包裝類對應(yīng)的基本數(shù)據(jù)類型
自動裝箱&自動拆箱(jdk1.5以后)
基本類型添加到集合中時峭拘,進(jìn)行自動裝箱
包裝類型在涉及到運算的時候俊庇,“加狮暑,減,乘辉饱, 除” 以及 “比較 equals,compareTo”搬男,進(jìn)行自動拆箱
5. 簡單數(shù)據(jù)類型轉(zhuǎn)換
容量類型排序
簡單類型數(shù)據(jù)間的轉(zhuǎn)換,有兩種方式:自動轉(zhuǎn)換和強制轉(zhuǎn)換
5.1 自動類型轉(zhuǎn)換
自動類型轉(zhuǎn)換:容量小的類型自動轉(zhuǎn)換為容量大的數(shù)據(jù)類型 --> 總結(jié):小容量轉(zhuǎn)大容量
public static void main(String[] args) {
? ? //1.多個類型數(shù)據(jù)混合運數(shù)時,系統(tǒng)會按最大的類型進(jìn)行轉(zhuǎn)換
? ? int a = 10;
? ? //float a1 = a + 1.1; //錯誤? 結(jié)果類型一個是double
? ? float a2 = a + 1.1F;? //結(jié)果類型一個是float
? ? double a3 = a + 1.1;? //結(jié)果類型一個是double
? ? //2.容量大的賦值給容量小的肯定會報錯
? ? //int b = 1.1; //錯誤 原因:double -> int
? ? //3.(byte彭沼,short) 和 char之間不會相互自動轉(zhuǎn)換
? ? byte b1 = 10; //正確
? ? int b2 = 1;
? ? //byte b3 = b2; //錯誤 原因:變量賦值止后,判斷該類型
? ? //char c1 = b1; //錯誤 原因:byte不能自動轉(zhuǎn)換為char
? ? //4.byte,short溜腐,char該三個數(shù)據(jù)類型計算译株,計算時首先轉(zhuǎn)換為int類型
? ? byte c1 = 1;
? ? short c2 = 2;
? ? //short c3 = c1 + c2; //錯誤 原因:計算時首先轉(zhuǎn)換為int類型
? ? int c3 = c1 + c2; //正確
}
5.2 強制類型轉(zhuǎn)換
強制類型轉(zhuǎn)換:將容量大的數(shù)據(jù)類型轉(zhuǎn)換為容量小的數(shù)據(jù)類型 --> 總結(jié):大容量轉(zhuǎn)小容量
public static void main(String[] args) {
? ? ? ? //1.精度降低或溢出
? ? ? ? int i = (int) 1.9; //結(jié)果 1
? ? ? ? //2.強轉(zhuǎn)符號只針對于最近的操作數(shù)有效,往往會使用小括號提升優(yōu)先級
? ? ? ? //int x = (int) 10 * 3.5 + 6 * 1.5;//編譯錯誤
? ? ? ? int x = (int) (10 * 3.5 + 6 * 1.5);//正確 (int)44.0 -> 44
? ? ? ? //3.char類型可以保留int的常量值挺益,不能保存int的變量值需要強轉(zhuǎn)
? ? ? ? char c = 100; //保留int的常量值
? ? ? ? int i = 100;
? ? ? ? //char m = i; //錯誤
? ? ? ? char m = (char) i; //正確
}
5.3 隱含強制類型轉(zhuǎn)換(初始化)
在變量的初始化時歉糜,整數(shù)的默認(rèn)類型是 int。byte b = 123; 123 默認(rèn)是 int 類型望众,他會隱含強制轉(zhuǎn)換為低級別的 byte 和 short 類型匪补,所以不用顯示強制轉(zhuǎn)換;但是 int 類型只能顯式強制轉(zhuǎn)換為 long 型烂翰,所以 long a = 123L;
浮點型不存在這種情況夯缺,因為在定義 float 類型時必須在數(shù)字后面跟上 F 或者 f。
5.4 其他類型轉(zhuǎn)換
包裝類型向字符串的轉(zhuǎn)換
String str = "11.1";
Double d = new Float("11.1");? ?
String str1 = d.toString();
1
2
3
字符串向包裝類型的轉(zhuǎn)換
String str = "11.1";
Double d = new Float("11.1");
Double d = Double.parseDouble("11.1");?
Double d = Double.valueOf("11.1");
基本類型向字符串的轉(zhuǎn)換
Integer a = 1;
a.toString();//調(diào)用轉(zhuǎn)字符串的方法
String s =a +? "";//加上""自動轉(zhuǎn)換String類型
String.valueOf(a);//使用String的方法
6. 引用數(shù)據(jù)類型
6.1 類Class引用
Object :Object是一個很重要的類甘耿,Object是類層次結(jié)構(gòu)的根類踊兜,每個類都使用Object作為超類,所有對象(包括數(shù)組)都實現(xiàn)這個類的方法佳恬,用Object可以定義所有的類捏境。
Object object = new Object();
Integer Integer=(Integer)object;//
String :String類代表字符串,Java 程序中的所有字符串字面值(如"abc")都作為此類的實例來實現(xiàn)毁葱。檢查序列的單個字符垫言、比較字符串、搜索字符串倾剿、提取子字符串筷频、創(chuàng)建字符串副本、在該副本中前痘、所有的字符都被轉(zhuǎn)換為大寫或小寫形式凛捏。
Date :Date表示特定的瞬間,精確到毫秒际度。Date的類一般現(xiàn)在都被Calendar 和GregorianCalendar所有代替
Void :Void 類是一個不可實例化的占位符類葵袭,它保持一個對代表 Java 關(guān)鍵字 void 的 Class 對象的引用。
6.2 接口interface引用
List:列表 乖菱,此接口的用戶可以對列表中每個元素的插入位置進(jìn)行精確地控制坡锡。用戶可以根據(jù)元素的整數(shù)索引 (在列表中的位置)訪問元素蓬网,并搜索列表中的元素。List 接口提供了兩種搜索指定對象的方法鹉勒。從性能的觀點來看帆锋,應(yīng)該小心使用這些方法。在很多實現(xiàn)中禽额,它們將執(zhí)行高開銷的線性搜索锯厢。 List 接口提供了兩 種在列表的任意位置高效插入和移除多個元素的方法。
add() : 在列表的插入指定元素脯倒。
remove():移除列表中指定位置的元素实辑。
get(int index):返回列表中指定位置的元素。
6.3 數(shù)組引用
數(shù)組:存儲在一個連續(xù)的內(nèi)存塊中的相同數(shù)據(jù)類型(引用數(shù)據(jù)類型)的元素集合藻丢。
數(shù)組中的每一個數(shù)據(jù)稱之為數(shù)組元素剪撬,數(shù)組中的元素以索引來表示其存放的位置,索引(下標(biāo))從0開始悠反。