1. String基础概念与核心特性
String(字符串)作为编程语言中最基础的数据类型之一,几乎存在于所有现代编程语言中。它本质上是一个字符序列,用于表示和处理文本信息。在Java、Python、C++等主流语言中,String都被设计为不可变(immutable)对象,这意味着一旦创建就不能被修改,任何看似修改的操作实际上都是创建了新的String对象。
注意:虽然JavaScript中的字符串也是不可变的,但在C语言中,字符串本质上是字符数组,具有可变性。这种差异会导致不同语言中字符串操作的性能特性大不相同。
String的不可变性带来了几个重要影响:
- 线程安全性:无需额外同步即可在多线程环境下安全使用
- 哈希值缓存:String的hashCode()可以缓存,提升作为HashMap键值的性能
- 字符串常量池:JVM可以优化存储,减少内存占用
在实际开发中,String的使用频率极高。统计显示,Java应用中平均约25%的对象都是String实例。因此,深入理解String的各种用法对提升代码质量和性能至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. String的创建与初始化方式
2.1 直接量创建方式
最常用的String创建方式是使用双引号直接量:
java复制String str1 = "Hello World";
String str2 = "你好,世界";
这种方式创建的字符串会被放入字符串常量池(String Pool),当创建相同内容的字符串时,JVM会直接引用常量池中的对象。例如:
java复制String a = "fly";
String b = "fly";
System.out.println(a == b); // 输出true,因为引用的是同一个对象
2.2 构造函数创建方式
通过new关键字调用构造函数会强制在堆内存中创建新对象:
java复制String str3 = new String("Hello");
String str4 = new String(new char[]{'H','e','l','l','o'});
即使内容相同,每次new都会创建新对象:
java复制String c = new String("fly");
String d = new String("fly");
System.out.println(c == d); // 输出false,因为是不同对象
2.3 其他创建方式
根据不同的编程需求,String还有多种创建方式:
- 从字节数组创建(指定字符集):
java复制byte[] bytes = {72, 101, 108, 108, 111};
String str5 = new String(bytes, StandardCharsets.UTF_8);
- 从StringBuffer/StringBuilder创建:
java复制StringBuffer sb = new StringBuffer("Hello");
String str6 = new String(sb);
- 格式化创建:
java复制String str7 = String.format("姓名:%s,年龄:%d", "张三", 25);
