String类
一.String类构成
1.定义
String 字符串对象本质上是一个 final 修饰的字符串数组对象所以字符串是常量,它们的值一旦被创建后不能改变。
final char[] ch;
2.String的实例化方式:
方式一:通过字面量定义的方式
方式二:通过new + 构造器的方式
//通过字面量定义的方式:此时的s1和s2的数据在方法区中的字符串常量池中。
String s1 = "java";
String s2 = "java";
//通过new 的方式:此时s3和s4保存的地址值是数据在堆中开辟空间以后对应的地址值。
String s3 = new String("java");
String s4 = new String("java");
System.out.println(s1 == s2);//true
System.out.println(s1 == s3);//false
System.out.println(s1 == s4);//false
System.out.println(s3 == s4);//false
3.字符串拼接
(1) 常量+常量 : “tu”+“lun” ->“tulun”;
(2) 变量+常量: String str4 = str+“lun”;
1) StringBuilder s = new StringBuilder();
2) s.append(str);//字符串拼接操作append
3) s.append("lun");
4) String str4= s.toString();
- 1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
- 2.只要其中有一个是变量,结果就在堆中。
- 3.如果拼接的结果调用intern()方法,返回值就在常量池中
4.字符串比较
基本数据类型:比较的是基本数据类型的值是否相同
引用数据类型:比较的是引用数据类型的地址值是否相同
字符串中String类对象==比较,比较的是地址,而不是内容;所以改写equals方法
二.String类的方法:
- char[] toCharArray():把字符串转换为字符数组
- String toLowerCase():把字符串转换为小写字符串
- String toUpperCase():把字符串转换为大写字符串
- str.length();获取字符串的长度
- char charAt(int index):获取指定索引处的字符
- int compareTo():比较两个字符串的大小
- String.valueOf(10);将整型10转为字符串类型
- String substring(int start):从start开始截取字符串
- String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end
- String[] split(String str) 按照指定符号分割字符串
- str.equals();比较字符串的内容是否相同
三.String StringBuilder StringBuffer
- StringBuffer是线程安全(因为 StringBuffer 的所有公开方法都是 synchronized 修饰的)可以不需要额外的同步用于多线程中;
- StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;
共同点:可以通过append、indert进行字符串的操作。
区别
相同点:都可以对字符串进行操作
不同点:
(1)多线程环境:
StringBuffer(线程安全)String S tringBuilder(不安全)
(2)效率问题分析
常量+常量 →String
变量+常量 →StringBuilder
(3)调用函数不同
StringBuilder s = new StringBuilder();
s.append(“1”);
s.append(“2”);