String类
2.String实现了Serializable接口,表示字符串是支持序列化的
实现了Comparable,表示String可以比较大小
3.String内部定义了final char[] vaiue用于储存字符串数据
4.String代表不可变的字符序列
体现:当对字符串重新赋值时,需重写指定内存区域赋值
5.通过字面量的方式给一个字符串赋值,此时的字符串值声明在字符串常量池中
String类的常用方法:添加链接描述
String 与 byte转换
//编码String —> byte
//解码byte —> String
例题
public void test1() throws UnsupportedEncodingException {
String str = "abc123中国";
byte[] bytes = str.getBytes();
System.out.println(Arrays.toString(bytes));//[97, 98, 99, 49, 50, 51, -28, -72, -83, -27, -101, -67]
byte[] gbks = str.getBytes("gbk");
System.out.println(Arrays.toString(gbks));//[97, 98, 99, 49, 50, 51, -42, -48, -71, -6]
System.out.println(new String(bytes));//abc123中国
System.out.println(new String(gbks));//乱码//abc123�й�
System.out.println(new String(gbks, "gbk"));//abc123中国
}
字符串对象是如何存储的
1.常量与常量的拼接结果在常量池,且常量池中不在存在相同内容的常量
2.只要其中有一个是变量,结果就在堆中
3.如果拼接的结果调用intern()方法,返回值就在常量池中
String类、StringBuffer类、StringBuilder类,此三类异同
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列, 而且
提供相关功能的方法也一样
面试题:对比String、 StringBuffer、 StringBuilder
String(JDK1.0): 不可变字符序列
StringBuffer(JDK1.0): 可变字符序列、效率低、线程安全
StringBuilder(JDK 5.0):可变字符序列、效率高、 线程不安全
注意:作为参数传递的话,方法内部String不会改变其值, StringBuffer和StringBuilder
会改变其值。