一、String的创建和基本操作
1、String的创建
String类型是Java中的基本数据类型之一,用于表示一串字符。可以通过以下几种方式创建一个String类型的对象:
String str1 = "Hello, World!"; // 直接赋值 String str2 = new String("Hello, World!"); // 使用new关键字创建 char[] charArr = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!'}; String str3 = new String(charArr); // 通过字符数组创建
2、String的基本操作
String类型的对象可以进行基本的操作,如获取长度、截取子串、拼接字符串等。
String s = "Hello,World!"; int length = s.length(); // 获取字符串长度 String subStr = s.substring(0,5); // 截取子串 String newStr = s.concat(" Goodbye!"); // 拼接字符串
二、String的常用函数
1、equals()函数
用于比较两个字符串是否相等,注意需要使用equals()函数来比较,不要使用“==”运算符。
String s1 = "Hello"; String s2 = "Hello"; if(s1.equals(s2)){ System.out.println("s1 equals s2"); }
2、compareTo()函数
用于比较两个字符串的大小,返回值为负数表示该字符串小于另一个字符串,返回值为0表示两个字符串相等,返回值为正数表示该字符串大于另一个字符串。
String s1 = "Hello"; String s2 = "World"; int result = s1.compareTo(s2); if(result < 0){ System.out.println("s1 < s2"); }else if(result == 0){ System.out.println("s1 = s2"); }else{ System.out.println("s1 > s2"); }
3、indexOf()函数
用于查找一个字符串中是否包含另一个字符串,如果包含则返回该子串的索引。
String s1 = "Hello,World!"; int index = s1.indexOf("World"); System.out.println("The index is: " + index);
三、StringBuffer和StringBuilder
1、StringBuffer
StringBuffer是Java中用来表示可变字符串的类,可以进行添加、删除、修改等操作,通常用于在循环中或者多次拼接字符串时使用,因为其效率更高。
StringBuffer sb = new StringBuffer(""); for(int i=0;i<10;i++){ sb.append(i); } System.out.println(sb.toString());
2、StringBuilder
StringBuilder与StringBuffer的功能类似,不同的是它不是线程安全的,但是在单线程情况下效率更高。
StringBuilder sb = new StringBuilder(""); for(int i=0;i<10;i++){ sb.append(i); } System.out.println(sb.toString());
四、String的不可变性
在Java中,String类型的对象是不可变的,一旦创建就无法被修改。
例如:
String s1 = "Hello"; String s2 = s1 + "World"; System.out.println(s1); // 输出的结果为"Hello" System.out.println(s2); // 输出的结果为"Hello,World!"
由于字符串的不可变性,当我们尝试修改一个字符串时,实际上是创建了一个新的字符串对象,旧的字符串对象并没有被修改。
五、String的内存优化
对于频繁操作的字符串,Java会将其缓存起来,避免重复创建对象。
String s1 = "Hello"; // 创建一个新的String对象 String s2 = "Hello"; // 尝试使用缓存中的String对象 if(s1 == s2){ System.out.println("s1 equals s2"); }
在上述代码中,s1和s2的内容相同,但是由于s1是新创建的String对象,s2则是缓存中的String对象,因此s1和s2的引用地址并不相同。要比较两个字符串是否相等,需要使用equals()函数。
六、总结
本文介绍了Java中String的创建、基本操作、常用函数和StringBuffer/StringBuilder的用法,同时也解释了String的不可变性和内存优化。