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以后,字符串拼接会预估生成一个数组,来进行拼接)
本文介绍了Java中的字符串处理,包括String类的不可变性,字符串池的概念,以及通过equals方法进行比较。此外,还讨论了StringBuilder用于提高字符串拼接效率的方式,和JDK8引入的StringJoiner,它简化了字符串操作并提高了效率。最后,文章提到了字符串拼接的内存管理和不同方法的性能影响。

被折叠的 条评论
为什么被折叠?



