Java学习笔记——String类

本文深入解析Java中的String类,涵盖其不可变性、字符串池原理、构造方法、常见操作如比较、搜索、修改及转换方法,同时对比了StringBuilder与StringBuffer的特性与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String类

java.lang.String类代表字符串。Java程序中所有的字符串文字都可以被看作是实现类的实例(对象),也就是说凡是用双引号引起来的内容,都是一个字符串String类的对象。

特点:

  • 字符串是一个不可变的类,也就是字符串的值在创建后不能修改。
    • 不可变是指值本身不能改变,如果重新给字符串对象赋值,字符串对象会指向一个新的值
    • 字符串池的原理:字符串池是一个专门用来存储字符串值得空间,所有创建的字符串对象在赋值时,都需要和字符串池中已有的内容进行对比,如果内容已经存在,直接引用已存在的值得内存地址;如果不存在,才会把新的内容放到字符串池中。

String的构造方法

  • 默认创建一个字符串对象时,可以直接把内容使用双引号引起来即可。
    • 例如: String name=”张三”;
  • 可以使用String的构造方法来创建对象。
    • 例如: String name=new String(“李四”);但是,该方式会创建两个对象,原始对象是构造方法中的字符串参数,name其实就是一个对象副本
public class Test7 {
    public static void main(String[] args) {
        char[] chars = {'a','b','c'};
        //可以传一个字符数组
        String str = new String(chars);

        byte[] bytes = {1,2,3};
        //可以传一个byte数组
        String str1 = new String(bytes);

        //会创建两个对象一个“abc”和一个str2
        String str2 = new String("abc");
    }
}

*String类中比较常用的方法

整理出来加强记忆,在平时使用时会经常用到,只是举出几个常用的方法 ,如果不够全面可以参考API文档中的方法。

String 长度

public ubt length(); 返回字符串的长度

String类中的比较相关方法

返回值类型方法说明
booleanequals(Object obj)将字符串与指定对象进行比较
booleanequalsIgnoreCase(String value)此方法比较两个字符串,忽略大小写形式
intcompareTo(String value)按字典顺序比较两个字符串。相等返回0;如果字符串在参数值之前返回值小于0;字符串在参数值之后,返回值大于0
intcompareToIgnoreCase(String value)按字典顺序比较两个字符串,不考虑大小写
booleanstartsWith(String value)检查一个字符串是否以参数字符串开始
booleanendWith(String value)检查一个字符串是否以参数字符串结束

注:(compareTo()方法比较两个字符串,首先比较两个字符串的首字母是否一致,如果不一致就直接使用它们的ASCII码值相减作为最终的结果;如果相同,则比较第二个字符,以此类推。如果有一方已经比较完毕,这种情况下,直接把两个字符串的长度相减作为最终的结果)

String类中的搜索相关方法

返回值类型方法说明
intpublic int indexOf(int ch)返回指定字符ch在此字符串中第一次出现处的索引值,如果未出现该字符,则返回-1
intpublic int indexOf(String str)返回第一次出现的指定字符串str在此字符串中的索引值,如果未出现该字符串,则返回-1
intpublic int lastIndexOf(int ch)返回最后一次出现的指定字符在此字符串中的索引值,如果未出现该字符,则返回-1
intpublic int lastIndexOf(String str)返回最后一次出现的指定字符串str在此字符串中的索引值,如果未出现该字符,则返回-1
charpublic int charAt(int index)从指定索引index处提取单个字符,索引中的值必须为非负

###String类中的修改相关方法

返回值类型方法说明
Stringpublic String substring(int index)提取从位置索引index开始直到此字符串末尾的这部分子字符串
StringpublicString substring(int beginIndex,int endIndex)提取从beginIndex开始直到endIndex(不包括此位置)之间的这部分字符串
Stringpublic String concat(String str)将指定字符str串联接到此字符串的结尾称为一个新的字符串返回
Stringpublic String replace(char oldChar,char newChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所用oldChar而生成的
Stringpublic String trim()返回字符串的副本,忽略前导空白和尾部空白
Stringpublic String toUpperCass()将此字符串中的所有字符都转换为大写
Stringpublic String toLowerCase()将此字符串中的所有字符都转换为小写

字符串转换和分割相关的方法

返回值类型方法说明
char[]public char[] toCharArray();将字符串转换为一个新的字符数组
String[]public String[] split(String regex)将字符串按照给定的regex进行分割,返回一个字符串数组

StringBuilder和StringBuffer

由于String类的对象内容是不可改变的,所以每当进行字符串操作后,总会在内存中创建一个新的对象,即耗时又浪费内存空间,为解决这一问题,java中提供了java.lang.StringBuilder和java.lang.StringBuffer类。这两个类又称为可变字符序列,他是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该对象的长度和内容。

StringBuilder、StringBuffer

可变字符串

  • 内部维护了一个字符串缓冲区,可以实现在现有字符串基础上做修改

  • Java中提供了两种可变字符串类型,他们的api完全兼容

  • 构造方法:

    public class Test2 {
        public static void main(String[] args) {
            //构造一个没有字符的字符串缓冲区,初始容量为16
            StringBuilder builder = new StringBuilder();
            //构造一个初始化为指定字符串内容的字符串缓冲区
            StringBuilder builder1 = new StringBuilder("aaa");
            //构造一个没有字符的字符串缓冲区,容量为参数值
            StringBuilder builder2 = new StringBuilder(34);
            //用法都一样,同上
            StringBuffer buffer = new StringBuffer();
        }
    }
    
  • 这两个类中,有很多对字符串操作的方法,可以看API文档

区别:
  • StringBuffer在JDK1中就有 线程安全、执行效率低、适用于多线程环境
  • StringBuilder是JDK5新增类 线程不安全、执行效率高、适用于单线程环境
  • 在频繁的字符串操作时,如果不考虑线程问题,那么StringBuilder的效率是最高的,String永远是效率最低的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值