目錄
1、Java常用的數據類型
分類 | 數據類型 | 占用二進制字節 | 舉例 | 類型默認值 | 基本數據類型封裝類 | |
基本數據類型 (四類八種) |
整型 | 字節型(byte) | 8位 | byte a = 100 | 0 | Byte |
短整型(shot) | 16位 | short s = 1000 | 0 | Short | ||
整型(int) | 32位 | int a = 100000 | 0 | Integer | ||
長整型(long) | 64位 | long a = 100000L | 0L | Long | ||
浮點型 | 單精度(float) | 32位 | float f1 = 234.5f | 0.0f | Float | |
雙精度(double) | 64位 | double d1 = 123.4 | 0.0d | Double | ||
字符型 | 字符型(char) | 16位 | char letter = 'A' | 'u0000' | Character | |
布爾型 | 布爾型(boolean) | 1位 | boolean one = true | false | Boolean | |
引用數據類型 | 類 | calss | null | |||
接口 | interface | null | ||||
數組 | arr | null | ||||
空類型 | null | null |
數據類型轉換圖標(圖片來源:https://www.cnblogs.com/liangxiaofeng/p/5721506.html)
PS:黃色標示需要強制轉換,藍色標示自動轉換,白色標識不需要轉換
2、Java中arrayList和array的區別
array:數組,容量固定不可變,同一個數組只能存放類型一樣的數據(基本數據類型/引用數據類型),聲明時必須指定長度,使用效率比集合高
1 int[] a=new int[10]; 2 int a[]=new int[10]; 3 int a[]={1,2,3,4};
arrayList:動態數組(集合的一種),數組的一種高級實現,容量可變,可動態的添加、刪除元素,只能存儲引用數據類型,聲明時不必須指定其長度,使用效率比數組低。
1 ArrayList list = new ArrayList(10); 2 ArrayList list1 = new ArrayList();
3、Java中list、set和map的區別
list、set和map都屬於集合接口,都在java.util包下面:
接口 |
繼承的接口 | 區別 | 相關常見實現類 | 實現類的特點 |
list列表 | collection接口 | 有序(每個元素對應一個下標)、元素可重復、可插入多個null值作為元素,可用for循環和迭代器進行遍歷 | ArrayList動態數組 | 動態數組,不帶泛型的時候允許任何符合規則的元素插入,可自動擴容,可根據下標隨機訪問元素,非同步,查詢優於LinkedList,增刪遜於LinkedList(需要移動數據) |
LinkedList雙向鏈表 | 不能隨機訪問,從鏈表兩端開始遍歷查找,非同步 | |||
Vector矢量 | 操作與ArrayList相同,同步,線程安全 | |||
Stack堆棧,繼承自Vector | 繼承自Vector,后進先出,常用方法push()\pop()\peek()獲取棧頂元素\empty()判斷堆棧是否為空\search() | |||
set 集合 |
collection接口 | 無序(本身順序按照元素本身的hashCode排列),元素不可重復、最多只能有一個null元素,只能用迭代器進行遍歷 | HashSet | 號稱查詢最快的集合,元素順序取決於元素的哈希碼,不能保證元素順序不變 |
TreeSet | 由二叉樹對實現,基於TreeMap,不允許由null值,使用元素值的自然順序排列 | |||
LinkedSet | 根據元素的哈希值決定元素的存儲位置,同時使用鏈表維護元素的順序,遍歷時以元素添加時的順序進行訪問,訪問速度優於HashSet,插入性能遜於HashSet | |||
EnumSet | ||||
map 映射 |
map集合中每個元素包含一個鍵值對,鍵key不可重復,鍵對應的值value可重復 |
HashMap | 繼承自AbstractMap類,可接受為null的鍵值(key)和值(value),線程不安全 |
|
HashTable | 繼承自Dictionary類,不接受為null的鍵值(key)和值(value),線程安全 |
|||
TreeMap | ||||
WeakHashMap | 基於java弱引用,對象隨時可能被回收,適用於緩存 |
4、Object類下常用的方法
https://www.cnblogs.com/qwddqy/p/7570850.html(詳細)
Object類是所有類的父類,位於java.lang包中,數組也是Object類的子類。任何類的對象,都可以調用Object類中的方法,包括數組對象。
Object類的常用方法
- toString方法;
- toString方法可以將任何一個對象轉換成字符串返回,返回值的生成算法為:getClass().getName() + '@' + Integer.toHexString(hashCode())。
- equals方法;
- Object類中的equals方法,用來比較兩個引用的虛地址。當且僅當兩個引用在物理上是同一個對象時,返回值為true,否則將返回false。
- 任何類可以根據實際需要,覆蓋toString及equals方法,實現自定義的邏輯。
hashCode方法;
獲取對象的哈希碼值,為16進制。
5、equals()方法和“==”的區別
equals()比較兩個對象的地址,“==”比較兩個對象的值(內容)
- equals方法與hashCode方法關系(詳細:https://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html)
- 如果兩個對象使用equals比較返回true,那么它們的hashCode值一定要相同。
- 如果兩個對象equals比較返回false,那么它們的hashCode值不一定不同,重寫equals方法時請必須重寫hashcode,以保證equals方法相等時兩個對象hashcode返回相同的值。如果你不按照規范來,就不一定相同了。
6、java中創建對象的方式
詳細:https://www.cnblogs.com/wxd0108/p/5685817.html
使用new關鍵字 | 最常見也是最簡單的創建對象的方式了。通過這種方式,我們可以調用任意的構造函數(無參的和帶參數的)。 |
} → 調用了構造函數 |
使用Class類的newInstance方法 | 可以使用Class類的newInstance方法創建對象。這個newInstance方法調用無參的構造函數創建對象。
|
} → 調用了構造函數 |
使用Constructor類的newInstance方法 | 和Class類的newInstance方法很像, java.lang.reflect.Constructor類里也有一個newInstance方法可以創建對象。我們可以通過這個newInstance方法調用有參數的和私有的構造函數。
|
} → 調用了構造函數 |
使用clone方法 | 無論何時我們調用一個對象的clone方法,jvm就會創建一個新的對象,將前面對象的內容全部拷貝進去。用clone方法創建對象並不會調用任何構造函數。 要使用clone方法,我們需要先實現Cloneable接口並實現其定義的clone方法。 |
} → 沒有調用構造函數 |
使用反序列化 | 當我們序列化和反序列化一個對象,jvm會給我們創建一個單獨的對象。在反序列化時,jvm創建對象並不會調用任何構造函數。
|
} → 沒有調用構造函數 |
7、final關鍵字
final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量 )
被修飾的類不能被繼承,被修飾的方法不能被重寫,被修飾的變量只能被賦值一次( 基本類型不能修改初始值,引用數據類型不能修改初始址)
8、java 中操作字符串都有哪些類?它們之間有什么區別?
String\StringBuffer\StringBuilder
類 | 繼承關系 | 特性 | 常用方法 |
String |
|
|
String() contains() equals() format() length() ... |
StingBuffer |
|
|
append()末尾增加元素 insert()指定位置插入元素 ... |
StringBuilder |
|
|
append()末尾增加元素 insert()指定位置插入元素 .... |