/*
getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
getBytes(): 使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
*/
public class StringDemo3 {
public static void main(String[] args) throws UnsupportedEncodingException {
// 字符串和byte数组之间的相互转换
// 定义一个字符串
String str=new String("JAVA 编程 基础");
// 将字符串转换为byte数组,并打印输出
byte[] arrs=str.getBytes("GBK");
for(int i=0;i<arrs.length;i++)
System.out.print(arrs[i]+" ");
// 将byte数组转换为字符串
String str1=new String(arrs,"GBK");
System.out.println(str1);
}
}
- 在UTF-8下,每个汉字占3个字节。
- 汉字为负数是因为超过了128,溢出。
- byte 和 String 在转换时,一定要注意编码一致。
- 字符串内存中的分配【★★★★★】
- 字符串的不可变性【★★★★★】
- 定义:字符串本身不发生变化,都是通过赋值来改变的。
- 缺点:如果字符串比较复杂的话,会生成很多中间变量。
字符串(StringBuilder & StringBuffer)
public class StringBuilderDemo1 {
public static void main(String[] args) {
// 定义一个字符串"你好"
StringBuilder str=new StringBuilder("你好");
//在"你好"后面添加内容,将字符串变成"你好,imooc!"
// str.append(',');
// str.append("imooc!");
// System.out.println("str="+str);
System.out.println("str="+str.append(',').append("imooc!"));
// 将字符串变成"你好,iMOOC!"
// 两种方式:
// 1、使用delete方法删除mooc,然后在插入MOOC
// System.out.println("替换后:"+str.delete(4, 8).insert(4, "MOOC"));
// 2、使用replace方法直接替换
System.out.println("替换后:"+str.replace(4, 8, "MOOC"));
// 在字符串"你好,iMOOC"中取出"你好"并输出
System.out.println(str.substring(0,2));
}
}
- 在单线程下基本都使用StringBuilder,在多线程中才会考虑使用StringBuffer。