从认识String类,到走进String类的世界

努力进修 2024-10-09 10:05:02 阅读 51

作为一个常用的数据类型,跟随小编一同进入String的学习吧,领略String的一些用法。

在这里插入图片描述

1. 认识 String 类

2. 了解 String 类的基本用法

3. 熟练掌握 String 类的常见操作

4. 认识字符串常量池
5. 认识 StringBuffer 和 StringBuilder

一:认识String类

1.概念:String是编程语言中表示字符串的数据类型。字符串是由零个或多个字符组成的有限序列,通常用于表示文本。

2.表示方法:在大多数编程语言中,字符串使用双引号(")括起来,如"hello"就是一个字符串。

例如:如下相关题目

字符串相加

二:了解 String 类的基本用法

1.获取字符串信息

length():返回字符串的长度。

charAt(int index):返回指定索引处的字符。

isEmpty():判断字符串是否为空。

2.字符串转换

toLowerCase():将字符串中的所有字符转换为小写。

toUpperCase():将字符串中的所有字符转换为大写。

trim():返回字符串的副本,忽略前导空白和尾部空白。

3.字符串比较

equals(Object obj):比较字符串的内容是否相同。

equalsIgnoreCase(String anotherString):与equals方法类似,但忽略大小写。

compareTo(String anotherString):比较两个字符串的大小。

4.字符串截取

substring(int beginIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取到字符串结尾的一个子字符串。

substring(int beginIndex, int endIndex):返回一个新的字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

5.字符串判断

endsWith(String suffix):测试此字符串是否以指定的后缀结束。

startsWith(String prefix):测试此字符串是否以指定的前缀开始。

contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true。

6.字符串索引

indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。

lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。

7.字符串拼接

使用+运算符或append()方法可以将多个字符串拼接在一起。

三:熟练掌握 String 类的常见操作

<code>public class StringDemo {

public static void main(String[] args) {

String str1 = "HelloWorld";

String str2 = "";

// 获取字符串长度

System.out.println(str1.length());

// 获取指定索引处的字符

System.out.println(str1.charAt(0));

// 判断字符串是否为空

System.out.println(str1.isEmpty());

System.out.println(str2.isEmpty());

// 字符串转换

str2 = str1.toUpperCase();

System.out.println(str2);

str2 = str2.toLowerCase();

System.out.println(str2);

// 字符串比较

System.out.println(str1.equals(str2));

System.out.println(str1.equalsIgnoreCase(str2));

// 字符串截取

System.out.println(str1.substring(2));

System.out.println(str1.substring(1, 3));

// 字符串判断

System.out.println(str1.endsWith("rld"));

System.out.println(str1.startsWith("He"));

System.out.println(str1.contains("wor"));

// 字符串索引

System.out.println(str1.indexOf("wo"));

System.out.println(str1.lastIndexOf("o"));

// 字符串拼接

String str3 = str1 + "abc";

System.out.println(str3);

}

}

注意:final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。

四:认识字符串常量池

常量池:为了提高性能和减少内存消耗,Java等语言引入了字符串常量池。相同内容的字符串在常量池中只存储一份,不同变量可以引用同一份字符串。

字符串常量池的优点:

1.减少内存占用:通过重用字符串对象,避免了重复创建相同的字符串对象,从而减少了内存占用。

2.提高性能:由于减少了字符串对象的创建和销毁操作,因此提高了程序的性能。

// 示例1

String s1 = "abc";

String s2 = "abc";

System.out.println(s1 == s2); // 输出:true

// 示例2

String s3 = new String("abc");

String s4 = new String("abc");

System.out.println(s3 == s4); // 输出:false

// 示例3

String s5 = new String("abc");

String s6 = "abc";

System.out.println(s5 == s6); // 输出:false

// 示例4

String s7 = new String("abc").intern();

String s8 = "abc";

System.out.println(s7 == s8); // 输出:true

示例1:由于s1和s2都是通过字面量方式创建的字符串,且内容相同,因此它们指向的是同一个字符串对象在常量池中的引用。

示例2:s3和s4都是通过new关键字创建的字符串对象,它们在堆中分别占有一个独立的空间,因此s3和s4不相等。

示例3:s5是通过new关键字创建的字符串对象,在堆中占有一个独立的空间;而s6是通过字面量方式创建的字符串,指向的是常量池中的字符串对象。因此s5和s6不相等。

示例4:s7首先通过new关键字在堆中创建了一个字符串对象,然后通过intern()方法将该字符串对象加入到常量池中,并返回常量池中该字符串的引用。由于s8是通过字面量方式创建的字符串,指向的是常量池中的字符串对象,因此s7和s8相等。

五:认识 StringBuffer 和 StringBuilder

StringBuilder和StringBuffer都是Java中用于创建和操作可变字符串的类,它们提供了比String类更高效的字符串操作方法,特别是在需要频繁修改字符串内容的情况下。

StringBuilder

1.概述:

1.1 StringBuilder是Java中的一个类,属于java.lang包。

1.2 它用于创建可变的字符序列,即可以对其内容进行添加、删除、替换等操作而不会创建新的对象。

2.特点:

2.1 可变性:StringBuilder对象是可变的,修改操作不会创建新的对象。

2.2 性能:由于不会频繁创建新的对象,StringBuilder在进行大量字符串拼接或修改操作时性能较高。

2.3 线程不安全:StringBuilder是非线程安全的,即不支持多线程环境下的并发操作,但在单线程环境中效率较高。

3.构造方法:

3.1 无参构造方法:创建一个初始容量为16的StringBuilder对象。

3.2 指定初始容量的构造方法:创建一个具有指定初始容量的StringBuilder对象。

3.3 通过字符串初始化的构造方法:使用指定字符串初始化StringBuilder对象。

4.常用方法:

append():追加字符串到当前StringBuilder对象的末尾。

insert():在指定位置插入字符串。

delete():删除指定范围内的字符。

deleteCharAt():删除指定位置的字符。

replace():替换指定范围内的字符。

reverse():将字符序列进行反转。

setCharAt():修改指定位置的字符。

substring():返回指定范围内的子字符串。

capacity():返回当前StringBuilder对象的容量。

length():返回当前StringBuilder对象的长度(字符数)。

ensureCapacity():确保StringBuilder具有最小的容量。

trimToSize():调整StringBuilder的容量使其等于字符序列的长度。

5.底层原理:

5.1 StringBuilder内部使用可变字符数组(在JDK 9及以后版本中使用字节数组,但逻辑上仍视为字符数组)存储字符序列。

5.2 当进行字符串操作时,如追加、插入或删除字符,StringBuilder会相应地调整其内部数组的大小和内容。

StringBuffer

1.概述:

1.1 StringBuffer也是Java中的一个类,同样属于java.lang包。

1.2 它与StringBuilder类似,都用于创建可变的字符序列。

2.特点:

2.1 可变性:StringBuffer对象也是可变的。

2.2 性能:StringBuffer在进行大量字符串拼接或修改操作时性能也较高,但由于其线程安全的特性,相对于StringBuilder可能会有一定的性能开销。

2.3 线程安全:StringBuffer是线程安全的,即支持多线程环境下的并发操作。

3.构造方法:

3.1 StringBuffer的构造方法与StringBuilder类似,包括无参构造方法、指定初始容量的构造方法和通过字符串初始化的构造方法。

4.常用方法:

4.1 StringBuffer的常用方法与StringBuilder几乎相同,包括append()、insert()、delete()

deleteCharAt()、replace()、reverse()、setCharAt()、substring()等。

4.2 需要注意的是,由于StringBuffer是线程安全的,因此其方法实现中包含了同步机制(使用synchronized关键字),以确保在多线程环境下的正确性。

5.使用场景:

5.1 当需要在多线程环境中安全地操作字符串时,应使用StringBuffer。

5.2 在单线程环境中,如果不需要线程安全的特性,为了获得更高的性能,建议使StringBuilder。

StringBuilder和StringBuffer都是Java中用于创建和操作可变字符串的类,它们提供了丰富的字符串操作方法。在选择使用哪个类时,应根据具体的应用场景和需求来决定。如果需要线程安全的特性,则选择StringBuffer;如果不需要线程安全的特性且追求更高的性能,则选StringBuilder。

>在面试中也频繁被问到,比如:String、StringBuff和StringBulider之间的区别

1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.

2.StringBuffer与StringBuilder大部分功能是相似的

3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。