在 Java 中,**字符串(String)**是非常常用的类型,主要有以下几种创建方式,以及它们背后的区别。
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true(同一对象)
new 关键字(不推荐)String s3 = new String("Hello");
"Hello",也会在常量池中创建一个String s4 = new String("Hello");
System.out.println(s3 == s4); // false(不同对象)
char[] chars = {'H', 'e', 'l', 'l', 'o'};
String s5 = new String(chars);
常用于:
byte[] bytes = {72, 101, 108, 108, 111};
String s6 = new String(bytes);
指定编码(推荐):
String s7 = new String(bytes, StandardCharsets.UTF_8);
String s8 = "Hel" + "lo"; // 编译期优化,等同于 "Hello"
String s9 = s1 + " World"; // 运行期,实际生成新对象
⚠️ 注意:
+StringBuilder 或 StringBufferStringBuilder / StringBufferStringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World");
String result = sb.toString();
区别:
| 类 | 是否线程安全 | 性能 |
|---|---|---|
| StringBuilder | 否 | 高(推荐) |
| StringBuffer | 是 | 较低 |
| 创建方式 | 是否入池 | 是否推荐 |
|---|---|---|
"abc" |
✅ | ✅✅✅ |
new String("abc") |
❌ | ❌ |
char[] / byte[] |
❌ | ✅ |
| 拼接 | 视情况 | 少量可用 |
StringBuilder |
❌ | ✅✅ |
String a = "abc";
String b = new String("abc");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
✅ 比较内容用 equals
❌ 比较对象地址才用 ==
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。