String类
- String 对象用来保存字符串,也就是一组字符序列
- 字符串常量对象使用双引号括起的字符序列
- 字符串的字符使用Unicode字符编码,一个字符占两个字节
- String类较常用构造器:
- String s1 = new String();
- String s2 = new String(String original);
- String s3 = new String(char[] a);
- String s4 = new String(char[] a,int startIndex,int count);
String 类实现了接口 Serializable 【Strign 可以串行化:可以在网络传输】,还有接口Comparable 【String对象可以比大小】
String类是final类,不能被其他的类继承
String又属性private final char value[],用于存放字符串内容
一定要注意: value是一个final类型,不可以修改它的地址
String创建剖析
创建String对象得两种方式:
- 方式1: 直接赋值 String str = “hello”;
- 方式2: 使用构造器 String str = new String(“hello”);
方式1: 先从常量池查看是否又"hello"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向得是常量池的空间地址
方式2: 现在堆中创建空间,里面维护了value属性,指向常量池的hell空间,如果常量池没有“hello”,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址
package cn.meowrain.WrapperClass;
public class wrapper06 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
}
}
两种方式的内存分布图:
package cn.meowrain.WrapperClass;
public class wrapper06 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println(str1 == str2); //T
System.out.println(str1.equals(str2));//T
System.out.println(str3 == str4);//F
System.out.println(str3.equals(str4));//T
}
}
String 类的常用方法
String类是保存字符串常量的,每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder
和StringBuffer
来增强String的功能,并提高效率
StringBuffer类
StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
StringBuffer是一个容器
String vs StringBuffer
- String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
- StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高
package cn.meowrain.StringBuffer_;
public class str01 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("hello");
stringBuffer.insert(2,"nice");
System.out.println(stringBuffer);//henicello
}
}
StringBuffer类的常用方法
StringBuilder是单线程,速度更快(没有线程安全)