八、API&字符串
8.1 概述
API(Application Programming Interface):应用程序编程接口。
简单理解,API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。
Java API:指的就是JDK中提供的各种功能的Java类。
8.2 String
java.lang.String 类代表字符串,Java程序中所有字符串文字都为此类的对象。
注意:字符串的内容是不会改变的,它的对象在创建后不能被更改。
创建String对象的两种方式
- 直接赋值
String name = "你好"
- new
public String();//创建空白字符串
public String(String orginal);//根据传入的字符串创建字符串对象
public String(char[] chs);//根据字符数组,创建字符串对象
public String(byte[] chs);//根据字节数组,创建字符串对象
第一种方法内存原理:
当使用双引号直接赋值,系统会检查该字符串在串池中是否存在。
若不存在,就创建新的字符串。
若存在,就直接复用。
第二种方法内存原理:
Java中String类的常见方法:
- 比较
- ==号比较原理:基本数据类型比数据值、引用数据类型比地址值
- boolean equals方法
- boolean equalsIgnoreCase方法 忽略大小写比较
- 遍历
- public char charAt(int index):根据索引返回字符
- public int length():返回此字符串的长度
- 数组的长度:数组名.length 属性
- 字符串的长度:字符串对象.length() 方法
- 截取
- String substring(int beginIndex, int endIndex) 左闭右开
- String substring(int beginIndex) 截取到末尾
- 替换
- String replace(旧值, 新值) 替换
8.3 StringBuilder
为什么学习StringBuilder?
- 字符串拼接
- 字符串的反转
StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。
- 作用:提高字符串的操作效率
StringBuilder构造方法
public StringBuilder();//创建一个空白可变的字符串对象,不含有任何内容
public StringBuilder(String str);//根据字符串的内容来创建可变字符串对象
//StringBuilder是java已经写好的类,java底层对他进行了一些特殊处理
//打印对象不是地址值而是属性值
StringBuilder常用方法
public StringBuilder append(任意类型);//添加数据返回对象本身
public StringBuilder reverse();//反转容器内容
public int length();//返回长度
public String toString();//通过toString就可以实现把StringBuilder转为String
8.4 StringJoiner
- StringJoiner和StringBuilder一样,也可以看成一个容器,创建之后里面的内容是可变的。
- 作用:提高字符串的操作效率,而且代码编写特别简洁。
- JDK8出现
StringJoiner构造方法
public StringJoiner(间隔符号);//创建一个StringJoiner对象,指定拼接的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号);//指定拼接的间隔符号,开始符号,结束符号
StringBuilder成员方法
public StringJoiner add(添加的内容);//添加数据并返回对象本身
public int length();//返回长度
public String toString();//返回一个字符串
8.5 字符串原理
字符串拼接的底层原理:
- 情况1:拼接的时候没有变量,都是字符串。此时触发字符串优化机制,在编译的时候就是最终的结果了。
- 情况2:有变量。
早期内存原理
虽然使用了StringBuilder,但是效率低的原因:多次创建StringBuilder
StringBuilder源码分析:
- 默认创建一个长度为16的字节数组
- 添加的内容长度小于16,直接存
- 添加的内容大于16会扩容(原来的容量*2 + 2)
- 如果扩容之后还不够,以实际的长度为准
修改字符串的内容套路
- substring
- 变成字符数组.toCharArray