字符串(基础知识整理)

API

API (Application Programming Interface) :应用程序编程接口

简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可

Java API:指的就是 JDK 中提供的各种功能的 Java类。这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

String概述

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

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

String注意点

字符串的内容是不会发生改变的,它的对象在创建后不能被更改,字符串拼接产生一个新的字符串。

创建String对象的两种方式

  • 直接赋值

  • new

String s1 = new String("abc");

String s2 = "abc";

s1记录的是new出来的,记录在堆里面的地址值。

s2是直接赋值的,所以记录的是字符串常量池中的地址值。

String类的构造方法:

构造方法说明
public String()创建空白字符串,不含有任何内容
public String(String original)根据传入的字符串,创建字符串对象(基本不用)
public String(char[] chs)根据字符数组,创建字符串对象
public String(byte[] bys)根据字节数组,创建字符串对象
String s = "abc";直接赋值的方式创建字符串对象,内容就是abc

示例代码

public class StringDemo01 {
    public static void main(String[] args) {
        //public String():创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1:" + s1);
​
        //public String(char[] chs):根据字符数组的内容,来创建字符串对象
        //应用场景:修改字符串中的内容
        char[] chs = {'a', 'b', 'c'};
        String s2 = new String(chs);
        System.out.println("s2:" + s2);
​
        //public String(byte[] bys):根据字节数组的内容,来创建字符串对象
        //应用场景:以后在网络当中传输的数据其实都是字节信息
        //我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了
        byte[] bys = {97, 98, 99};
        String s3 = new String(bys);
        System.out.println("s3:" + s3);
​
        //String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
        //用得最多,最常见
        String s4 = "abc";
        System.out.println("s4:" + s4);
    }
}

Java的内存模型

  • 栈内存:方法运行的时候进栈,执行完毕出栈

  • 堆内存:new出来的对象都在这里

  • 方法区:临时存储字节码文件

  • String Table(串池):直接赋值的字符串存储在这里,new关键字创建的不在。

  • 在JDK7以前,这个池子在方法区中,从JDK7开始,串池就从方法区中挪到了堆内存,但是无论位置在哪儿,它的运行机制总是不变的。

直接赋值方式:当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在,如果不参在,会创建新的,如果存在,直接复用。

构造方法方式:通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同。不会复用,浪费内存空间。

==号的作用(比的到底是什么)

  • 比较基本数据类型:比较的是具体的值

  • 比较引用数据类型:比较的是对象地址值

结论:==只能用于比较基本数据类型。不能比较引用数据类型。

字符串比较

boolean equals方法(要比较的字符串):完全一样才是true,否则为false

boolean equalsIgnoreCase(要比较的字符串):忽略英文状态下的大小写比较

StringBuilder概述

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

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

StringBuilder构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

StringBuilder常用方法

打印StringBuilder对象不是地址值而是属性值,因为StringBuilder是Java已经写好的类,Java在底层对它做了一些特殊处理。

链式编程

当我们在调用一个方法的时候,不需要用变量接收它的结果,可以继续调用其他方法

依赖前一个方法的结果,再去调用后面的方法

使用StringBuilder的场景

  • 字符串的拼接

  • 字符串的反转

StringJoiner概述

StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。

作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。

JDK8出现的

StringJoiner的构造方法

StringJoiner的成员方法

StringJoiner基本使用

//1.创建一个对象,并指定中间的间隔符号
StringJoiner sj = new StringJoiner("---");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
//3.打印结果
System.out.println(sj);//aaa---bbb---ccc
//1.创建对象
StringJoiner sj = new StringJoiner(", ","[","]");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
int len = sj.length();
System.out.println(len);//15
//3.打印
System.out.println(sj);//[aaa, bbb, ccc]
String str = sj.toString();
System.out.println(str);//[aaa, bbb, ccc]

总结

String:表示字符串的类,定义了很多操作字符串的方法

StringBuilder:一个可变的操作字符串的容器。可以高效的拼接字符串,还可以将容器里面的内容反转。

StringJoiner:JDK8出现的一个可变的操作字符串的容器,可以高效、方便的拼接字符串。在拼接的时候,可以指定间隔符号、开始符号、结束符号。

扩展内容

字符串存储的内存原理

直接赋值会复用字符串常量池中的

new出来的不会复用,而是开辟一个新的空间

字符串拼接的底层原理

如果没有变量参与,都是字符串直接相加,会触发字符串的优化机制,在编译的时候就已经是最终的结果了,会复用串池中的字符串。

如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。

StringBuilder提高效率原理图

所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存。

StringBuilder源码分析

  • 默认创建一个长度为16的字节数组

  • 添加的内容长度小于16,直接存

  • 添加的内容大于16会扩容(原来的容量*2 + 2)

  • 如果扩容之后还不够,以实际长度为准

容量:最多装多少;长度:已经装了多少

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python基础知识整理包括以下几个方面: 1. 数据类型:Python中常见的数据类型有整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、字典(dict)等。 2. 变量和赋值:在Python中,可以使用变量来保存数据,并使用赋值语句将值赋给变量。变量名可以由字母、数字和下划线组成,但不能以数字开头。 3. 运算符:Python支持常见的算术运算符(如加减乘除)、比较运算符(如等于、大于、小于等)、逻辑运算符(如与、或、非)等。 4. 控制流程:Python中的控制流程包括条件语句(if-else)、循环语句(while和for)以及跳转语句(break和continue)等。 5. 函数和模块:函数是一段可重复使用的代码块,可以通过函数来组织代码和实现代码的复用。而模块是一个包含了函数、类和变量的文件,可以通过import语句导入并使用。 6. 异常处理:在编写程序时,可能会出现错误,为了避免程序崩溃,可以使用异常处理机制来捕捉和处理错误,保证程序的正常执行。 7. 文件操作:Python提供了丰富的文件操作函数,可以读取和写入文件内容,以及对文件进行其他操作。 8. 面向对象编程:Python是一种面向对象的编程语言,支持类和对象的概念,可以通过定义类来创建对象,并使用对象调用类中的方法和属性。 这些是Python基础知识的主要内容,希望对你有所帮助。如果你有具体的问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值