1. String类的定义
在Java中,String是一个类,是Java中最常用的类之一。Java中的每一个字符串都是String类的实例,也就是说每一次使用String来定义一个字符串,都是在创建一个String类的对象。可以通过用引号(包括单引号和双引号)括起来的文本来定义字符串,例如:
String str = "Hello World!";
String str2 = new String("Hello World!");
这两行代码都能定义一个字符串“Hello World!”,但是使用方式不同。第一行创建了一个字符串字面量,直接在“=”号后面把字符串像常量一样赋值并以“;”结束,编译器会根据这段字符串来创建一个String类的对象。而第二行代码创建了一个String对象,它使用了String类的构造方法来创建一个新的String对象。
2. String类的特点
2.1 String是一个不可变类
在Java中,String是一个不可改变的类,也就是说,一旦创建了一个String对象,在它的生命周期内,它的值不能被改变。例如:
String str = "Hello";
str += " World";
这段代码中,虽然对str做了字符串拼接,但是实际上是创建了一个新的String对象,原来的str指向的对象并没有改变。
2.2 String是一个final类
String类被定义为final,这意味着它不能被继承,而且任何尝试继承它的行为都会引发编译错误。这是因为如果允许继承String类,就可能会破坏String类的不可变性,导致不安全的代码。
2.3 String支持字符串连接操作符+
因为String是Java中最常用的类之一,所以Java提供了一些方便的方式来连接两个或多个字符串。最常见的方法是使用“+”操作符来连接两个字符串:
String str1 = "Hello";
String str2 = "World!";
String str3 = str1 + " " + str2;
这段代码中的“+”操作符可以用来连接两个或多个字符串。在这个例子中,“+”操作符用于将字符串“Hello”、“ ”和“World!”连接到一起,变成一个新的字符串“Hello World!”。
3. String类的常用方法
3.1 length()
length()方法返回字符串的长度,即字符串所包含的字符数:
String str = "Hello World!";
int length = str.length(); // length的值为12
3.2 compareTo()
compareTo()方法用于将一个字符串与另一个字符串进行比较,比较结果为整数:
String str1 = "Hello";
String str2 = "Hello";
int result = str1.compareTo(str2); // result的值为0
如果比较的两个字符串相等,结果为0,如果第一个字符串小于第二个字符串,结果为负数;如果第一个字符串大于第二个字符串,结果为正数。
3.3 equals()
equals()方法用于比较两个字符串是否相等。如果两个字符串相等,返回true,否则返回false:
String str1 = "Hello";
String str2 = "Hello";
boolean result = str1.equals(str2); // result的值为true
这个方法是区分大小写的,在比较时会同时比较每一个字符。
3.4 substring()
substring()方法用于截取一个字符串的一部分,并返回一个新的字符串:
String str = "Hello World";
String substring = str.substring(6); // substring的值为"World"
这个方法有两个重载方法,一个是只传入一个起始位置的参数,另一个是同时传入起始位置和终止位置的参数。例如:
String str = "Hello World";
String substring1 = str.substring(0, 5); // substring1的值为"Hello"
String substring2 = str.substring(6); // substring2的值为"World"
3.5 toLowerCase()/toUpperCase()
toLowerCase()方法用于将字符串中的所有字符转换为小写字母。示例代码如下:
String str = "Hello World";
String lowerStr = str.toLowerCase(); // lowerStr的值为"hello world"
toUpperCase()方法用于将字符串中的所有字符转换为大写字母。示例代码如下:
String str = "Hello World";
String upperStr= str.toUpperCase(); // upperStr的值为"HELLO WORLD"
3.6 trim()
trim()方法用于去除字符串两端的空格,返回一个新的字符串:
String str = " Hello World ";
String trimResult = str.trim(); // trimResult的值为"Hello World"
3.7 indexOf()
indexOf()方法用于查找一个字符或者字符串在原字符串中第一次出现的位置,返回一个int类型的值。示例代码如下:
String str = "Hello World";
int index = str.indexOf("World"); // index的值为6
3.8 split()
split()方法用于根据指定的分隔符,将字符串拆分成若干个子字符串,并将这些子字符串存储到一个数组中:
String str = "apple,orange,banana";
String[] splits = str.split(","); // splits的值为["apple", "orange", "banana"]
在这个例子中,split()方法根据逗号将字符串拆分成三个子字符串,分别是“apple”、“orange”和“banana”,然后将这些子字符串存储到一个字符串数组中。
4. String类的性能
由于String类的不可变性,每当对String进行修改操作时,都会创建一个新的String对象。这意味着如果需要对一个字符串做很多修改操作,会创建很多个中间对象,会占用大量的内存,对程序的性能表现会有很大的影响。
为了解决这个问题,Java提供了一个叫做StringBuilder的类,它允许我们对字符串进行修改操作,而不会创建多个中间对象。StringBuilder的使用方法和String类类似。下面是一个使用StringBuilder类的示例:
StringBuilder sb = new StringBuilder();
for(int i=0; i<10000; i++) {
sb.append(i);
}
String result = sb.toString();
5. 总结
Java中的String类是一个不可变的final类,它可以创建字符串,并支持各种常用的字符串操作方法。由于它是不可变的,所以每次修改都会创建一个新的对象,可能会影响程序的性能表现。如果要对字符串做多次修改操作,可以使用StringBuilder类来代替。