一、可變性java
(1)String類型是使用一個final修飾的字符數組,所以它是不可變的。程序員
private final char value[];
那把String定義爲不可變有什麼好處呢?
安全性:當你在調用其餘方法,好比調用一些系統級操做以前,可能會有一系列校驗,若是是可變類的話,可能在你校驗事後,其內部的值被改變了,可能引發嚴重的系統崩潰問題。
性能:進行哈希計算時,因爲不可變性,能夠只計算一次哈希值,若是設計爲可變,那麼就須要屢次從新計算哈希值,性能上會有損耗。算法
(2)StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,也採用字符數組存儲,但未用final修飾,所以可變數組
二、線程安全性
(1)String變量因不可變,可看做常量,所以是線程安全的。
(2)StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,因此是線程安全的。 (3)StringBuilder並無對方法進行加同步鎖,因此是非線程安全的。安全
三、性能
(1)每次改變String後都會生成一個新的對象,所以性能損耗較大。
(2)StringBuffer每次都會對StringBuffer對象自己進行操做,性能較String更優。
(3)相同狀況下使用StirngBuilder 相比使用StringBuffer 僅能得到10%~15% 左右的性能提高,但卻要冒多線程不安全的風險。多線程
四、使用場景
(1)操做少許數據用String
(2)單線程下操做大量數據用StringBuilder
(3)多線程下操做大量數據用StringBuffer工具
五、其餘
爲什麼推薦使用StringBuilder而不是「+」作字符串鏈接?性能
在使用「+」作字符串拼接時,是會建立一個StringBuilder去完成拼接的,可是若是是在循環中進行操做,就會每次建立一個新的StringBuffer,性能上會有損耗,所以推薦直接使用StringBuffer。ui
一、java.util.Collection 是一個集合接口。不少類包括map,set等都實現了這個接口。線程
二、Collections是一個工具類,不能實例化,提供了有一些方法:sort等。
一、char屬於固定長度字符,而varchar屬於可變長度字符,均可以用來存儲字符串。
二、使用char時,若是輸入的數目小於指定的數目,會在後面補空格;大於指定的數目時,會截取後面的部分。
https://ask.qcloudimg.com/htt...
三、varchar使用時,輸入長度+1即爲實際長度,多出來的一個字節用於保存實際使用了多大的長度。
一、toString()方法: toString方法返回該對象的字符串表示,其實該字符串內容就是對象的類型+@+內存地址值
二、equals()方法: 判斷這兩個對象是不是相同的,若是不進行重寫,只會判斷對象的地址是否相同,即若是不是同一個對象,就會返回false。
三、hashCode()方法:將十六進制地址值經過哈希算法換算爲整值。
四、getClass()方法:獲取對象的字節碼文件(該對象運行時的類)。
Java中的內存泄漏指的是對象雖然再也不被使用,但它們仍然被引用。
Vector v=new Vector(10); for (int i=1;i<100; i++) { Object o=new Object(); v.add(o); o=null; }
好比在上述這個例子中,Object對象o被加入了Vector對象v中,雖然o修改成null,這種狀況下,v依然引用對象,那麼這個對象對於GC來講,就是不可回收的,即產生了內存泄漏。
一、Error(錯誤)是系統中的錯誤,程序員是不能改變的和處理的,是在程序編譯時出現的錯誤,只能經過修改程序才能修正。(水池)
二、Exception(異常)表示程序能夠處理的異常,能夠捕獲且可能恢復。(水)
(1)CheckedException:(編譯時異常) 須要用try——catch顯示的捕獲,對於可恢復的異常使用CheckedException。
(2)UnCheckedException(RuntimeException):(運行時異常)不須要捕獲,對於程序錯誤(不可恢復)的異常使用RuntimeException。
好比:
NullpointerException:空指針異常(我目前碰見的最多的)
IndexOutOfBoundsException:索引超出邊界異常
注:ClassNotFoundException與NoClassDefFoundError的區別:
(1)ClassNotFoundException是指在類加載器的加載階段找不到類信息。如Class.forName(),ClassLoader.loadClass()等。
(2)NoClassDefFoundError是指在運行使用階段時卻出現了問題。如實例化依賴類找不到(刪除了.class文件)或者類自己就初始化失敗了等。