java创建字符串主要有两种方式:字符串字面量(如"abc")在常量池中复用对象,高效推荐;new string("abc")每次创建新堆对象,适用于需区分引用的场景。

Java 中创建和初始化字符串对象主要有两种方式:使用字符串字面量(推荐)和使用 new 关键字调用构造方法。它们在内存分配、对象复用和语义上存在关键区别。
使用字符串字面量(最常用)
这是最简洁、高效且符合 Java 习惯的方式:
- 直接用双引号包裹字符,如
"Hello",JVM 会自动在字符串常量池中查找或创建对应对象 - 相同字面量多次出现时,指向同一个池中对象,节省内存
- 代码示例:
String s1 = "abc";<br>String s2 = "abc";<br>System.out.println(s1 == s2); // true(引用同一常量池对象)
使用 new 关键字调用 String 构造器
这种方式总是创建新的堆内存对象,不检查常量池:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 即使内容相同,
new String("abc")每次都会生成新对象 - 适用于需要明确区分对象身份(比如测试引用比较)、或需基于其他字符数组/字节数组构建字符串的场景
- 常见写法:
String s3 = new String("abc");<br>String s4 = new String(new char[]{'a','b','c'});<br>String s5 = new String(new byte[]{97,98,99}); -
s1 == s3结果为false(不同对象),但s1.equals(s3)为true(内容相同)
其他常用初始化方式
根据数据来源灵活选择构造方法:
- 从字符数组:
new String(char[] data)或带起始/长度的重载new String(char[] data, int offset, int count) - 从字节数组:
new String(byte[] bytes),注意编码问题(建议显式指定 charset,如new String(bytes, StandardCharsets.UTF_8)) - 从 StringBuffer 或 StringBuilder:
new String(StringBuffer sb)或new String(StringBuilder sb) - 空字符串:
String s = "";或String s = new String();(后者不推荐,无必要创建新对象)
注意事项与建议
实际开发中应优先使用字面量方式,除非有明确理由需要新对象:
- 避免无意义的
new String("xxx"),它额外消耗堆内存且易引发误解 - 字符串不可变,所有“修改”操作(如
substring、concat)都返回新对象 - 拼接大量字符串优先用
StringBuilder,而非反复用+(尤其在循环中) - 判断字符串是否为空,用
str == null || str.isEmpty(),不要仅靠str.length() == 0
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










