java中int和integer區別
int 是基本類型,直接存數值
integer是對象,用一個引用指向這個對象
Java中int和Integer關係是比較微妙的。關係如下:
1.int是基本的資料類型;
2.Integer是int的封裝類;
3.int和Integer都可以表示某一個數值;
4.int和Integer不能夠互用,因為他們兩種不同的資料類型;
為什麼要提供封裝類呢。。。一是為了在各種類型間轉化,通過各種方法的調用。否則 你無法直接通過變數轉化。比如,現在int要轉為Stringint a=0;String result=Integer.toString(a);在java中封裝類,比較多的用途是用在於各種資料類型的轉化中。
String,StringBuffer,StringBuilder的區別
String 字串常量
StringBuffer 字串變數(安全執行緒)
StringBuilder 字串變數(非安全執行緒)
執行效率:
StringBuilder > StringBuffer > String
簡要的說, String 類型和 StringBuffer 類型的主要效能區別其實在於 String 是不可變的對象, 因此在每次對 String 類型進行改變的時候其實都等同於產生了一個新的 String 對象,然後將指標指向新的 String 對象,所以經常改變內容的字串最好不要用 String ,因為每次產生對象都會對系統效能產生影響,特別當記憶體中無引用對象多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。
1. String 類
String的值是不可變的,這就導致每次對String的操作都會產生新的String對象,不僅效率低下,而且大量浪費有限的記憶體空間。
String a = "a"; //假設a指向地址0x0001
a = "b";//重新賦值後a指向地址0x0002,但0x0001地址中儲存的"a"依舊存在,但已經不再是a所指向的,a 已經指向了其它地址。
因此String的操作都是改變賦值地址而不是改變值操作。
2. StringBuffer是可變類,和安全執行緒的字串操作類,任何對它指向的字串的操作都不會產生新的對象。 每個StringBuffer對象都有一定的緩衝區容量,當字串大小沒有超過容量時,不會分配新的容量,當字串大小超過容量時,會自動增加容量。
StringBuffer buf=new StringBuffer(); //分配長16位元組的字元緩衝區
StringBuffer buf=new StringBuffer(512); //分配長512位元組的字元緩衝區
StringBuffer buf=new StringBuffer("this is a test")//在緩衝區中存放了字串,並在後面預留了16位元組的空緩衝區。
3.StringBuffer
StringBuffer和StringBuilder類功能基本相似,主要區別在於StringBuffer類的方法是多線程、安全的,而StringBuilder不是安全執行緒的,相比而言,StringBuilder類會略微快一點。對於經常要改變值的字串應該使用StringBuffer和StringBuilder類。
4.安全執行緒
StringBuffer 安全執行緒
StringBuilder 線程不安全
5.速度
一般情況下,速度從快到慢:StringBuilder>StringBuffer>String,這種比較是相對的,不是絕對的。
6.總結
(1).如果要操作少量的資料用 = String
(2).單線程操作字串緩衝區 下操作大量資料 = StringBuilder
(3).多線程操作字串緩衝區 下操作大量資料 = StringBuffer