API(Application Programming Interface) &字符串
API(应用程序编程接口)
字符串
1.String
-
Java程序中的所有字符串文字(列如:“abc”)都为此类的对象。
-
String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。
-
字符串不可变,他们的值在创建后不能被更改。
2.创建String对象的两种方法
-
直接赋值
String name = "里古拉斯"
-
new 构造方法
3.StringTable串池
直接赋值的字符串才有,JDK7以前串池在方法区中,再此之后在堆内存中
当在使用直接赋值的时候,系统会检查该字符串在串池中是否存在,不存在则创建新的,存在的则复用。
public class Stringdemo { public static void main(String[] args) { String s1="abd"; //s1记录的是字符串abd的地址值 String s2 = "abd"; //因为StringTable中已经有了相同字符串所以直接将地址值复用给s2 } }
补充:==号比的是什么
基本数据类型:比较的是数据值
引用数据类型:比较的是地址值
4.equals字符串比较
boolean equals(要比较的字符串) 完全一样结果为true反之为false
boolean equalsIgnoreCase(要比较的字符串) 忽略大小写的比较
public class Stringdemo { public static void main(String[] args) { String s1=new String("abd"); String s2 = "abd"; boolean result = s1.equals(s2); System.out.println(result); } }
5.String Builder
StringBuilder可以看作是一个容器,创建之后里面的内容是可以变化的
作用:提高字符串的操作效率
//效率低,需要时间长 String str = ""; for(i=0;i<99999999999;i++){ str = str + "abc"; } //提高效率 StringBuilder sb = new StringBuilder(); for(i=0;i<99999999999;i++){ sb.append("abc"); } //StringBuilder是Java写好了的类,在底层被特殊处理打印对象不是地址值而是属性值。 Sysetm.out.println(sb)
StringBuilder构造方法
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变的字符串对象,不含任何内容 |
public Stringbuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
StringBuilder常用方法
方法名 | 说明 |
---|---|
public StringBuilder append(任意类型) | 添加数据并返回对象本事 |
public StringBuilder reverse() | 反转容器中的内容 |
public int length() | 返回长度(字符出现的个数) |
public String toString() | 通过同String()就可以实现把StringBuilder转换为String |
使用StringBuilder字符串反转
public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String str = sc.next(); //2.反转键盘录入的字符串 String result = new StringBuilder().append(str).reverse().toString(); //3.比较 if(str.equals(result)){ System.out.println("当前字符串是对称字符串"); }else{ System.out.println("当前字符串不是对称字符串"); } }
使用StringBuilder的场景
-
字符串的拼接
-
字符串的反转
StringBuilder源码分析
-
默认创建一个长度为16的字节数组
-
添加的内容长度小于16,直接存
-
添加的内容长度大于16会扩容(原来容量*2+2)
-
如果大于扩容机制添加的容量(原来容量*2+2)则以实际长度为准
6.StringJoiner(JDK8)
概述:StringJoiner跟Stringbuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的
作用:提高字符串操作的效率,而且代码编写特别简洁。
StringJoiner构造方法
方法名 | 说明 |
---|---|
public String Joiner(间隔符号) | 创建一个String Joiner对象,指定拼接时间的间隔符号 |
public String Joiner(间隔符号,开始符号,结束符号) | 创建一个String Joiner对象,指定拼接时的间隔符号,开始符号、结束符号 |
StringJoiner成员方法
方法名 | 说明 |
---|---|
public StringJoiner add(添加内容) | 添加数据,并返回数据本身 |
public int length() | 返回长度(字符出现的个数) |
public String toString() | 返回一个字符串(该字符串就是拼接之后的结果) |
7.字符串原理
字符串拼接原理:
-
如果没有变量参与,都是字符串直接相加,编译后就是拼接之后的结果,会复用串池中的字符串
-
如果有变量参与,每行拼接的代码,都会在内存中创建新的字符串,浪费内存。
(在JDK8以前,字符串拼接都是new一个StringBuilder对象进行拼接然后在使用toString方法转为字符串类型,过程十分麻烦,且浪费内存)
(在JDK8以后,字符串拼接会预估生成一个数组,来进行拼接)