String类以及String与基本数据类型/char[]/byte[]之间的转换
- String類:
1.String 聲明為final的,不可被繼承
2.String實現了Serializable接口:表示字符串是支持序列化的。
實現了Comparable接口:表示String可以比較大小。
3.String內部定義了final char[] value用于存儲字符串數據
4.String:代表一個不可變的字符序列。簡稱:不可變性。
體現:1).當對字符串重新賦值時,需要重寫指定內存區域賦值,不能使用原有的value進行賦值。
2).當對現有的字符串進行連接操作時,也需要重寫指定內存區域賦值,不能使用原有的value進行賦值。
3).當調用String的replace()方法修改指定的字符/字符串時,也必須重寫指定內存區域賦值,不能使用原有的value進行賦值。
5.通過字面量的方式(區別于new)給一個字符串賦值,此時的字符串值聲明在字符串常量池中。
6.字符串常量池中不會存儲相同內容的字符串。
- String的對象在常量池還是堆中的考察
1.常量與常量的拼接結果在常量池。且常量池中不會存在相同內容的常量。(final修飾的變量=常量,即存在常量池中)
2.只要其中有一個是變量,結果就在堆中。
3.如果拼接的結果調用intern(),返回值就在常量池中。
- String與基本數據類型、包裝類之間的轉換:
String–>基本數據類型、包裝類:調用包裝類的靜態方法:parseXxx(str);
基本數據類型、包裝類–>String:調用String重載的valueOf(xxx);
- String與char[]之間的轉換
String–>ch[]:調用String的toCHarArray()
char[]–>String:調用String的構造器
- String與byte[]之間的轉換
編碼:String–>byte[]:調用String的getBytes();
解碼:byte[]–>String:調用String的構造器;
編碼:字符串–>字節(被我們所認識字符–>二進制數據)
解碼:編碼的逆過程,字節–>字符串(二進制數據–>我們認識的字符)
tips:解碼時,要求解碼使用的字符集必須與編碼時使用的字符集一致,否則會出現亂碼。
@Testpublic void test3() throws UnsupportedEncodingException {String str1 = "abc123";String str2 = "abc123中國";byte[] b1 = str1.getBytes();byte[] b2 = str2.getBytes();//使用默認的字符集進行轉換,UTF-8中一個漢字3位System.out.println(Arrays.toString(b1));//對數組進行遍歷System.out.println(Arrays.toString(b2));//UTF-8,gbk指定字符的時候與ACIll碼一樣byte[] gbks = str2.getBytes("gbk");//使用gbk字符集進行編碼,一個漢字2位System.out.println(Arrays.toString(gbks));System.out.println("****解碼********");String str3 = new String(b2);System.out.println(str3);String str4 = new String(gbks);//使用gbk解碼,會出現亂碼,編碼解碼前后得一致System.out.println(str4);//出現亂碼。原因:編碼集合解碼集不一致//若想使用gbk解碼,必須指明編碼也是gbkString str5 = new String(gbks,"gbk");System.out.println(str5);//沒有出現亂碼,編碼集和解碼集一致}運行結果:
題目考察:
1.String s = new String(“abc”);方式創建對象,在內存中創建了幾個對象?
答:兩個。一個是堆空間中new結構,另一個是char[]對應的常量池中的數據"abc"。
總結
以上是生活随笔為你收集整理的String类以及String与基本数据类型/char[]/byte[]之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EL表达式隐含对象和jstl命名冲突,j
- 下一篇: 提升销售人员的信息处理能力