一、定义和概念
String
是Java中非常重要的数据类型之一,表示一个字符序列,也就是一组字符。它是Java中预定义的类,所以我们可以直接使用它,无需导入额外的包。字符串常量被认为是Java中最基本的对象之一,创建string对象有两种方式:直接将字符串包含在双引号内,或者通过new操作符创建。
例如:
String str1 = "Hello World"; // 直接创建 String str2 = new String(); // 通过new操作符创建一个空字符串 String str3 = new String("Java Programming"); // 通过new操作符创建一个已知值的字符串
String
的长度即为其中包含字符的数量,可以通过调用length()
方法获取长度:
String str = "Hello World"; int length = str.length(); // length的值为11
二、字符串不可变
Java的字符串是不可变的,也就是说,一旦一个字符串被创建,它的值就无法被改变。如果我们试图改变字符串的值,实际上是创建了一个新的字符串对象,而原有的字符串对象并没有被改变。这个特点和C++中的const char*
十分相似。字符串不可变是Java安全性和性能的重要保证。
例如:
String str1 = "Hello"; str1 += " World"; // 将字符串连接到现有字符串上 System.out.println(str1); // 输出"Hello World" String str2 = "Goodbye"; str2.toUpperCase(); // 返回全大写的字符串 System.out.println(str2); // 输出"Goodbye"
我们可以看到,虽然我们试图改变字符串的值,但实际上并没有成功。
三、字符串拼接
字符串拼接是在开发中经常要用到的操作之一。对于字符串拼接,我们有多种方式来实现。
方式一:使用“+”运算符
String str1 = "Hello"; String str2 = ", "; String str3 = "World"; String result = str1 + str2 + str3; // 将多个字符串连接起来 System.out.println(result); // 输出"Hello, World"
方式二:使用concat()
方法
String str1 = "Hello"; String str2 = ", "; String str3 = "World"; String result = str1.concat(str2).concat(str3); // 使用concat方法将多个字符串连接起来 System.out.println(result); // 输出"Hello, World"
虽然两种方式的结果是相同的,但是使用concat()
方法可以减少一些不必要的新建字符串的开销,所以一般推荐使用concat()
方法。
四、字符串比较
Java中字符串的比较是常见的操作之一,我们可以使用==
和equals()
方法来比较两个字符串。虽然两者都可以用于比较字符串,但它们的语义是不相同的。
- 使用
==
比较两个字符串时,会判断它们是否指向同一个对象。也就是说,它们的引用地址是否相同。 - 使用
equals()
方法比较两个字符串时,会比较它们的值是否相等。
例如:
String str1 = "Hello"; String str2 = "Hello"; String str3 = new String("Hello"); System.out.println(str1 == str2); // 返回true,因为它们指向同一个字符串的引用地址,采用常量池技术 System.out.println(str1 == str3); // 返回false,因为str1和str3指向不同的对象,虽然内容相同 System.out.println(str1.equals(str3)); // 返回true,因为它们的值相同
五、字符串转化
字符串转化是Java开发中非常常见的操作,其中最常见的就是将字符串转化为基本类型值和其他对象类型。
5.1 字符串转化为基本类型值
Java针对每种基本类型都提供了一系列的包装类,这些包装类提供了将字符串转化为对应类型的静态方法。例如:
String str = "123"; int num = Integer.parseInt(str); // 将字符串转为int类型 double d = Double.parseDouble(str); // 将字符串转为double类型
如果需要转化为其他类型的基本数据类型,也可以使用相应的包装类提供的静态方法。
5.2 字符串转化为其他对象类型
Java提供了许多方法来将字符串转化为其他对象类型,最常见的就是将字符串转化为Date
类型和BigDecimal
类型。这些方法都存放在对应的类中。例如:
String str = "2022-01-01"; DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // SimpleDateFormat可以用于设置日期格式 Date date = sdf.parse(str); // 将字符串转为Date类型 System.out.println(date); // 输出"Sat Jan 01 00:00:00 CST 2022"
我们还可以使用BigDecimal
类型的valueOf()
方法将字符串转化为BigDecimal类型。例如:
String str = "12345.6789"; BigDecimal bd = BigDecimal.valueOf(Double.parseDouble(str)); System.out.println(bd); // 输出"12345.6789"
六、字符串作为参数传递
Java中传递参数时,如果传递的是基本类型,那么基本类型的值会被复制到方法中,方法中对该值的修改不会影响原来的值。但是,如果传递的是字符串类型,因为字符串不可变,所以对字符串进行修改时,实际上是创建了一个新的字符串对象。例如:
public class Test { public static void main(String[] args) { String str = "Hello"; changeString(str); System.out.println(str); // 输出"Hello" } public static void changeString(String s) { s = s + ", World"; } }
由于字符串不可变,所以方法中对字符串的改变不会影响原来的值。
七、总结
本文介绍了Java中的String
类型,包括定义和概念、字符串不可变、字符串拼接、字符串比较、字符串转化和字符串作为参数传递。同时,本文还介绍了Java中的一些基本类型和对象类型,以及它们之间的转化。