字符串string stringjoiner stringbuilder

String概述

java.lang.String类代表字符串,Java程序中的所有字符串文字(例如"abc")都为此类的对象

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

Java程序中的所有字符串文字都被定义为此类的对象

字符串的内容是不会发生改变的,他的对象在创建后不能被更改

String name="尼古拉斯";
    String schoolName="黑马";
sout(name+schoolName);
//创建了新的字符串

当使用双引号直接赋值的时候,系统会检查该字符串在串池中是否存在

  • 不存在 创建新的

  • 存在 复用

构造 方法
pubilc String()创建空白字符串,不含任何内容
public String(string original)根据传入的字符串 创建字符串对象
public String (char[] chs)根据字符数组,创建字符串对象
public String (byte[] chs)根据字节数组,创建字符串对象
public class StringDmeo1 {
    public static void main(String[] args) {
        //使用直接赋值的方式获取一个字符串对象
        String s1 = "abcc";
        System.out.println(s1);//abc

        //使用new的方式来获取一个字符串对象
        //空参构造:可以获取一个空白的字符串对象
        String s2 = new String();
        System.out.println("@" + s2 + "!");

        //传递一个字符串,根据传递的字符串内容再创建一个新的字符串对象
        //用的少
        String s3=new String("abvc");
        System.out.println(s3);//abvc

        //传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
        //需求 修改字符串的内容 abc Qbc
        //abc--->{'a','b','c'}--->{'Q',b,c}--->"Qbc"
        char[] chs={'a','b','c','d'};
        String s4=new String(chs);
        System.out.println(s4);//abcd

        //传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
        //应用场景 以后在网络中传输的数据其实都是字节信息
        //我们一般要把字节信息进行转换,转成字符串,用到这个构造
        byte [] bytes={97,98,99,100};
        String s5=new String(bytes);
        System.out.println(s5);//abcd
        //查了ASCII码
    }
}

字符串的比较

引用数据类型比较的是地址值
字符串的比较

  • boolean equals(要比较的字符串) 完全一样的结果才是true,否则为false
  • boolean equalsignoreCase (要比较的字符串) 忽略大小写的比较

遍历字符串

  • public char charAt(int index):根据索引返回字符
  • public int length():返回此字符串的长度
  • 数组的长度: 数组名.length
  • 字符串的长度:字符串对象.length()

字符串

  • String substring(int beginIndex,int endIndex) 截取
  • 注意点 包头不包尾,包左不包右
  • 只有返回值才是截取的小串,原来的其实没有变
  • String substring (int beginIndex) 截取到末尾

StringBuilder概述

stringbuilder可以看作是一个容器,创建之后里面的内容是可变的

作用 提高字符串的操作效率

stringbuilder构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
方法名说明
public StringBuilder append(任意类型)添加数据,并且返回对象本身
public StringBuilder reverse()反转容器中的内容
public int length()返回长度(字符出现的个数)
public String toString()通过toString()就可以实现把STringBuilder转换成string

stringjoiner的构造方法

方法名
public StringJoiner(间隔符号)创建一个stringjoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号)创建一个stringjonier对象,指定拼接时的间隔符号,开始符号,结束符号
stringjonier sj=new stringjonier("---")  1---2---3
    stringjonier sj=new stringjonier(",","[","]")[1,2,3]
    

StringJonier的成员方法

方法名说明
public StringJonier add(添加的内容)添加数据,并返回对象本身
public int length()返回长度(字符出现的个数)
public String toString()返回一个字符串(该字符串是拼接之后的结果)

字符串原理

字符串存储的内存原理

  • 直接赋值会复用字符串常量池中的
  • new出来的不会复用,而是开辟一个新的空间

==号比较的到底是什么

  • 基本数据类型比较数据值
  • 引用数据类型比较地址值
    在这里插入图片描述

一个加号 堆内存中两对象

jdk8字符串拼接底层原理

预估字符串的长度,创建一个数组,把字符串放到数组中

字符串拼接的时候有变量参与,在内存中创建了很多对象,浪费空间,时间也非常慢

结论: 如果很多字符串变量拼接,不要直接+,在底层会创建多个对象,浪费时间,浪费性能
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
字符串拼接的底层原理

  • 如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串
  • 如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存

stringbuilder提高效率的原因

  • 所有要拼接的内容都会在string builder中放,不会创建很多无用的空间,节约内存
    在这里插入图片描述

超过16的时候会扩容变成34

如果超出*2+2的容量则以实际容量为准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值