字符串
用双引号括起来的多个字符
"Hello World!"
"你好世界"
"\u0048\u0057"
"\n\t"
"a" // 虽然只有一个字符,但这也是个字符串
"" // 空字符串
- 空字符串不是 null ,空字符串是分配内存空间,null 是没有分配内存空间
不可变字符串
String
-
创建字符串
String strName="str";
-
用构造函数创建字符串
// 使用空字符串创建并初始化一个新的 String 对象 String strName=new String(); // 使用另外一个字符串创建并初始化一个新的 String 对象 String staName = new String(String original);
-
String(StringBuffer buffer)
:使用可变字符串对象(StringBuffer)创建并初始化一个新的 String 对象 -
String(StringBuilder builder)
:使用可变字符串对象(StringBuilder)创建并初始化一个新的 String 对象 -
String(byte[] bytes)
:使用平台默认的字符集解码指定的 byte 数组,通过 byte 数组创建并初始化一个新的 String 对象 -
String(char[] value)
:通过字符数组创建并初始化一个新的 String 对象 -
String(char[] calue, int offset, int count)
:通过字符数组的子数组创建并初始化一个新的 String 对象-
offset:子数组第一个字符的索引
-
count:指定子数组的长度
-
-
实例
// 创建字符串对象 String str1 = new String(); String str2 = new String("Hello World"); String str3 = new String("\u0048\u0065\u006c\u006c\u006f"); System.out.println("str2 = " + str2); System.out.println("str3 = " + str3); char[] chars = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; // 通过字符数组创建字符串对象 String str4 = new String(chars); // 通过子字符数组创建字符串对象 String str5 = new String(chars, 1, 4); System.out.println("str4 = " + str4); System.out.println("str5 = " + str5); byte[] bytes = { 97, 98, 99 }; // 通过 byte 数组创建字符串对象 String str6 = new String(bytes); System.out.println("str6 = " + str6); System.out.println("str6 的长度:" + str6.length());
str2 = Hello World str3 = Hello str4 = abcdefg str5 = bcde str6 = abc str6 的长度:3
-
字符串池
String str1 = "Hello"; // 字符串常量
String str2 = "Hello";
String str3 = new String("Hello"); // 使用 new 关键字创建
String str4 = new String("Hello");
System.out.printf("str1 == str2 : %b%n", str1 == str2);
System.out.printf("str3 == str4 : %b%n", str3 == str4);
System.out.printf("str1 == str3 : %b%n", str1 == str3);
System.out.printf("str2 == str3 : %b%n", str2 == str3);
str1 == str2 : true
str3 == str4 : false
str1 == str3 : false
str2 == str3 : false
字符串长度
strName.length();
连接字符串
-
使用 “ + ” 拼接
-
优势:可以拼接任何类型的数据成字符串
str1 + str2;
-
-
使用 contact(String str) 拼接
-
是能拼接 String 型数据
str1.contact(str2);
-
创建格式化字符串
可以使用 printf() 和 format() 方法
-
String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象
-
String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出
-
使用 printf() 方法
System.out.printf("浮点型变量的值为 " + "%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + "is %s", floatVar, intVar, stringVar);
-
使用 format() 方法
String fs; fs = String.format("浮点型变量的值为 " + "%f, 整型变量的值为 " + " %d, 字符串变量的值为 " + " %s", floatVar, intVar, stringVar);
StringBuffer 和 StringBuilder 类
在对字符串进行修改时使用
StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
-
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer
-
StringBulider 和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)
-
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类
-
实例
public class RunoobTest{ public static void main(String args[]){ StringBuilder sb = new StringBuilder(10); sb.append("Runoob.."); System.out.println(sb); sb.append("!"); System.out.println(sb); sb.insert(8, "Java"); System.out.println(sb); sb.delete(5,8); System.out.println(sb); } }
Runoob.. Runoob..! Runoob..Java! RunooJava!
-
在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类