基本型別、字串該注意的地方
1、不同資料型別之間的轉換有哪些規則
(1)型別自動轉換:低等資料型別可以自動轉換為高等資料型別,需要注意以下幾點
<1>char型別的資料轉換為高等型別(int,long等),會轉換為其對應的ASCII碼
<2>byte、char、short型別的資料在參與運算時會自動轉換為int型,但當使用"+="運算時,就不會產生型別的轉換
<3>基本資料型別不能與boolean型別相互轉換
(2)強制型別轉換:當需要從高階資料型別轉為低階資料型別時,就需要進行強制型別轉換
2、char型變數中是否可以儲存一箇中文漢字
在java語言中,預設採用的Unicode編碼方式,即每個字元佔用兩個位元組,因此可以儲存中文。String雖然由char組成,但是它採用的方式是:中文佔兩個位元組,英文佔一個位元組,這種方式大大節省儲存空間
3、java字串建立與儲存機制
String s1 = "abc"; //在常量區中存放了一個"abc"的字串物件
String s2 = "abc";//s2引用常量區中的物件,因此不會建立新的物件。
String s3 = new String("abc");//在堆中建立新的物件
String s4 = new String("abc");//在堆中又建立一個新的物件
new String("abc")建立了幾個物件?
answer:一個或者兩個。如果常量池中原來有字串"abc",那麼只建立一個物件;如果常量池中沒有字串"abc",那麼就建立兩個物件(這兩個物件分別位於字串常量池和堆中)。
4、String,StringBuffer與StringBuilder的區別??
String 字串常量
StringBuffer 字串變數(執行緒安全)
StringBuilder 字串變數(非執行緒安全)
String 型別和 StringBuffer 型別的主要效能區別其實在於 String 是不可變的物件, 因此在每次對 String 型別進行改變的時候其實都等同於生成了一個新的 String 物件,然後將指標指向新的 String
物件,所以經常改變內容的字串最好不要用 String ,因為每次生成物件都會對系統效能產生影響,特別當記憶體中無引用物件多了以後, JVM 的 GC 就會開始工作,那速度是一定會相當慢的。
而如果是使用 StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 物件本身進行操作,而不是生成新的物件,再改變物件引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字串物件經常改變的情況下。
在某些特別情況下, String 物件的字串拼接其實是被 JVM 解釋成了 StringBuffer 物件的拼接,所以這些時候 String 物件的速度並不會比 StringBuffer 物件慢,而特別是以下的字串物件生成中, String 效率是遠要StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“
test”);
你會很驚訝的發現,生成 String S1 物件的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不佔優勢。其實這是 JVM 的一個把戲,在 JVM 眼裡,這個
String S1 = “This is only a” + “ simple” + “test”; 其實就是:
String S1 = “This is only a simple test”; 所以當然不需要太多的時間了。
StringBuilder一個可變的字元序列是5.0新增的。此類提供一個與
StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。兩者的方法基本相同。
總結:
執行效率:StringBuilder>StringBuffer>String
運算元量比較少:String
單執行緒下操作大量資料:StringBuilder
多執行緒下操作大量資料:StringBuffer
5、length屬性和length()方法的區別
length()方法是針對字串而言的,length屬性是針對陣列而言的
相關文章
- C++ auto 型別推斷注意的地方C++型別
- 基本資料型別與字串型別資料型別字串
- 基本資料型別之字串資料型別字串
- Python - 基本資料型別_str 字串Python資料型別字串
- 自定義錯誤型別時應該注意的 nil !=nil型別
- Python3學習-(基本資料型別-字串)Python資料型別字串
- Python學習教程之基本資料型別字串Python資料型別字串
- GO語言學習——基本資料型別字串Go資料型別字串
- BigDecimal使用注意的地方Decimal
- Java的基本型別和引用型別Java型別
- 藍橋杯注意的地方
- 1.1.1python基本資料型別之數字和字串Python資料型別字串
- 為什麼基本型別可以呼叫方法——以字串為例型別字串
- SCSS 字串 型別CSS字串型別
- String:字串型別字串型別
- TypeScript 字串型別TypeScript字串型別
- java高階用法之:JNA型別對映應該注意的問題Java型別
- Java中的基本型別包裝類 Integer 類該怎麼使用?Java型別
- Java基礎系列(三十六):泛型中需要注意的地方Java泛型
- Typescript:基本型別TypeScript型別
- Go 基本型別Go型別
- 你不知道的JavaScript--Item4 基本型別和基本包裝型別(引用型別)JavaScript型別
- js基本型別和引用型別區別JS型別
- 結構struct(值型別)在實際應用中應該注意的點Struct型別
- TypeScript 基本型別和泛型的使用TypeScript型別泛型
- JavaScript - 基本型別與引用型別值JavaScript型別
- 基本資料型別與API引用型別的使用資料型別API
- 操作型別之字串型別字串
- Java的基本資料型別Java資料型別
- Python的基本資料型別Python資料型別
- 從賦值看基本型別和引用型別的區別賦值型別
- 型別轉換注意點型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- 基本資料型別資料型別
- 離職那些需要注意的地方
- distinct 去重需要注意的地方
- java基本型別和包裝型別的“==”和equals()方法Java型別
- JS篇-基本型別和引用型別、typeofJS型別
- TypeScript 字串字面量型別TypeScript字串型別