Java學習筆記7(Java常用類庫與工具 )
目錄
1.請簡述String,StringBuffer,StringBuilder三者之間的共同點與區別,應該分別在何種場景下使用?
2.為什麼不建議在for迴圈中使用“+”進行字串拼接?
3.什麼是字串的編碼與解碼?
1.請簡述String,StringBuffer,StringBuilder三者之間的共同點與區別,應該分別在何種場景下使用?
- 共同點
- 內部實現基於字元陣列,封裝了對字串處理的各種操作
- 可自動檢測陣列越界等執行時異常
- 不同點
- String內部實現基於常量字元陣列,內容不可變;
StringBuffer、StringBuilder基於普通字元陣列,陣列大小可根據字串 的實際長度自動擴容,內容可變 - 效能方面:
StringBuilder>StringBuffer>String - StringBuffer執行緒安全;StringBuilder非執行緒安全
- String內部實現基於常量字元陣列,內容不可變;
- 使用場景
- String:字串變化改動少,對安全性要求高的情況
- StringBuffer:需要頻繁進行字串運算,且執行在多執行緒環境中
- StringBuilder:需要頻繁進行字串運算,且執行在單執行緒環境中
2.為什麼不建議在for迴圈中使用“+”進行字串拼接?
- 若使用 s=“a”+“b”+“c” 句型,物件 a 和物件 b 相加之後生成新物件 ab,物件 ab 和 c 相加後,又生成新物件 abc,這樣如果有大量的字串需要連線,就會造成記憶體被不必要地浪費。
3.什麼是字串的編碼與解碼?請舉例說明
- 將 unicode 字符集轉為本地字符集(如 GB2312 或 GBK)的過程叫編碼(encode),反之叫解碼(decode)
- 編碼
import java.io.*;
public class CharCode {
public static void printByteArray(String msg,byte[] t){
System.out.println(msg+"****************");
for(int i=0;i<t.length;i++){
System.out.println(Integer.toHexString(t[i])); }
}
public static void printCharArray(String msg,char[] c){
System.out.println(msg+"****************");
for(int i=0;i<c.length;i++){
System.out.println(Integer.toHexString(c[i])); }
}
public static void main(String[] args){
try{
String str = "中文";
System.out.println(str);
printCharArray("unicode:",str.toCharArray()); //unicode字符集中對"中文"二字的對應程式碼
byte[] b =str.getBytes("GB2312"); //編碼:轉為本地字符集GBK2312對應的程式碼
printByteArray("GB2312",b);
byte[] m =str.getBytes("ISO8859-1"); //轉為ISO8859-1對應的程式碼
printByteArray("ISO8859-1",m); // ISO8859-1是英文字符集,沒有對應的漢字程式碼,所以轉化錯誤
}
catch(UnsupportedEncodingException e){
System.out.println("沒有相應的字符集!"); } } }
執行結果:
中文
unicode:****************
4e2d
6587
GB2312****************
ffffffd6
ffffffd0
ffffffce
ffffffc4
ISO8859-1****************
3f
3f
程式已結束,退出程式碼0
- 解碼
package myjava;
import java.io.*;
public class CharCode {
public static void printByteArray(String msg,byte[] t){
System.out.println(msg+"****************");
for(int i=0;i<t.length;i++){
System.out.println(Integer.toHexString(t[i])); }
}
public static void printCharArray(String msg,char[] c){
System.out.println(msg+"****************");
for(int i=0;i<c.length;i++){
System.out.println(Integer.toHexString(c[i])); }
}
public static void main(String[] args){
byte[] b = new byte[6];
int t=0,pos=0;
String s;
try{
while(t!='\n'){
t=System.in.read();
b[pos]=(byte)t;
pos++;
}
printByteArray("本地碼:",b);
s = new String(b,"GBK"); //解碼
System.out.println(s);
printCharArray("unicode碼:",s.toCharArray());
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
}
執行結果:
Chin
本地碼:****************
43
68
69
6e
a
0
Chin
unicode碼:****************
43
68
69
6e
a
0
程式已結束,退出程式碼0
相關文章
- Java學習筆記--sql與javaJava筆記SQL
- java學習筆記(包裝類)Java筆記
- Java學習筆記之類和物件Java筆記物件
- Java世界最常用的工具類庫Java
- Java中常用的容器類筆記Java筆記
- Java學習筆記之介面和抽象類Java筆記抽象
- java學習筆記Java筆記
- Head First Java學習筆記(7):繼承與多型Java筆記繼承多型
- Java註解與反射學習筆記Java反射筆記
- JAVA(三)JAVA常用類庫/JAVA IOJava
- JAVA程式設計學習記錄(API常用類(二))Java程式設計API
- java學習(五) —— 常用API類概述JavaAPI
- 《JAVA學習指南》學習筆記Java筆記
- Java學習筆記--資料庫初識Java筆記資料庫
- java 學習筆記--利用反射實現自定義toString()的工具類Java筆記反射
- Java-每日學習筆記(資料庫與idea技巧)Java筆記資料庫Idea
- JAVA中 XML與資料庫互轉 學習筆記三JavaXML資料庫筆記
- Java 集合學習筆記Java筆記
- java學習筆記6Java筆記
- Java學習筆記--反射Java筆記反射
- java學習筆記啊Java筆記
- Java學習筆記二Java筆記
- Java學習筆記三Java筆記
- Java JNI 學習筆記Java筆記
- Java學習筆記4Java筆記
- Java 工具類庫Java
- java小白學習筆記之初識javaJava筆記
- Java:常用類庫——未完Java
- Java學習筆記-Day21 Java System類、Class類、內部類、異常處理Java筆記
- java 常用工具類Java
- java常用工具類Java
- Java學習筆記記錄(二)Java筆記
- 《深入理解java虛擬機器》學習筆記7——Java虛擬機器類生命週期Java虛擬機筆記
- Java學習筆記--運算子Java筆記
- Java學習筆記系列-反射Java筆記反射
- Java JDK 9學習筆記JavaJDK筆記
- java學習筆記(異常)Java筆記
- 【Java學習筆記】Collections集合Java筆記