Java–String类
- String类声明为final,不能被继承
- String类实现了serializable接口,表示字符春是支持序列化的
- String类实现了comparable接口,表示String类可以比较大小
- String内部定义了final char【】value 用于储存字符串数据
- String代表不可变得字符序列
- 通过字面量的方式(区别于new)给一字符串赋值,此时的字符串值声明在字符串常量池中,字符串常量池中不会存储相同内容的字符串
String str1 = “abc”;
String str2 = “abc”;
此时是
s1==s2
存储地址相同
String不可变的 字符序列
/*
值传递+字符串
String 不可变性
基本数据类型传递的是存储数据
引用数据传递的是地址值
*/
public class StringTest {
String Str = new String("good");
char[] ch = {'t','e','s','t'};
public void change(String str ,char ch[]){
str = "test ok";
ch[0]='b';
}
public static void main(String[] args) {
StringTest ex = new StringTest();
ex.change(ex.Str,ex.ch);
System.out.println(ex.Str);//String不可变性
System.out.println(ex.ch);
}
}
String常用方法
常用类的转换
String–>char【】: 调用String的toCharArray()
char【】–>String: 调用String的构造器
编码:String–>byte【】:调用String的getBytes()
解码:byte【】–>String:调用String的构造器
编码:字符串–> 字节–>字符串(看得懂–>看不懂的二进制数据)
解码:编码的逆过程,字节–>字符串(看不懂的而进驻数据–>看得懂)
解码时,要求解码使用的字符集必须与编码时使用的字符集一致,否则出现乱码
String,StringBuffy和StringBuilder的使用
String:不可变的字符序列。
StringBuffy:可变的字符序列,线程安全,效率低
StringBuilder:可变的字符序列,jdk5.0新增,线程不安全,效率高
StringBuilder和StringBuffy一些常用的方法
StringBufferhe StringBuilder的内存解析
用StringBuffy为例
问题一:System.out.println(sb2.length());
问题2:扩容问题:如果要添加的数据底层数组放不下了,那就需要扩容底层数组
默认情况下,扩容为原来容量的二倍 +2 ,同时,将原数组中的元素复制到新的数组中
指导意义:发开中建议大家使用:StringBuffy(intcapacity)或者StringBuilder(intcapacity)
执行效率:StringBuilder>StringBuffer>String