字符串String

本文介绍了Java中的字符串处理,包括String类的不可变性,字符串池的概念,以及通过equals方法进行比较。此外,还讨论了StringBuilder用于提高字符串拼接效率的方式,和JDK8引入的StringJoiner,它简化了字符串操作并提高了效率。最后,文章提到了字符串拼接的内存管理和不同方法的性能影响。
摘要由CSDN通过智能技术生成

API(Application Programming Interface) &字符串

API(应用程序编程接口)

字符串

1.String

  • Java程序中的所有字符串文字(列如:“abc”)都为此类的对象。

  • String是Java定义好的一个类。定义在java.lang包中,所以使用的时候不需要导包。

  • 字符串不可变,他们的值在创建后不能被更改。

2.创建String对象的两种方法

  1. 直接赋值

    String name = "里古拉斯"
  2. 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的场景

  1. 字符串的拼接

  2. 字符串的反转

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以后,字符串拼接会预估生成一个数组,来进行拼接)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值