String st1 = "abc";
String st2 = "abc";
System.out.println(st1 == st2); // true
System.out.println(st1.equals(st2)); // true
String st1 = new String(“abc”); // 创建两个 Object: 常量池创建一个, Heap里复制常量池的对象
String st1 = new String("abc");
String st2 = "abc";
System.out.println(st1 == st2); // false
System.out.println(st1.equals(st2)); // true
String st11 = "a" + "b" + "c";
String st12 = "abc";
System.out.println(st11 == st12); // true
System.out.println(st11.equals(st12)); // true 常量池里面有“abc” 所以不再创建
String st1 = "ab";
String st2 = "abc";
String st3 = st1 + "c";
System.out.println(st2 == st3); // false
System.out.println(st2.equals(st3)); // true 原因如下图:
String a = new String("aaaaa");
String b = a.intern(); // 返回 a 在常量池中的地址
String c = "aaaaa";
System.out.println(a == b); // false 一个是 heap地址, 一个是 常量池地址
System.out.println(b == c); // true 都是 常量池的同一个地址
// a 在 常量池存入 "aaaaa" 和 "bbbbb"
String a = new String("aaaaa") + "bbbbb"; // 常量池中创建了 "aaaaabbbbb"
String b = a.intern();
System.out.println(a == b); // true
String c = "aaaaabbbbb";
System.out.println(a == c); // true
System.out.println(b == c); // true
String d = new String("aaa") + "aa";
String f = d.intern();
System.out.println(d = f); // false d在 heap里, f在 常量池里
StringBuilder 是 非线程安全的, append完成才返回完整的 final String
StringBuffer 是 线程安全的, 同样是 append 完成才返回完整的 final String; 主要用 append() 和 insert()
String... 代表的就是 String []
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。