String s1 = "hello";
String s2 = "hel" + "lo";
String s3 = "hel" + new String("lo");
System.out.println(s1==s2); // true
System.out.println(s1==s3); // false
主要是关于s3不是很理解,求大佬解释一下s3的创建过程和为什么s1和s3不等
String s1 = "hello";
String s2 = "hel" + "lo";
String s3 = "hel" + new String("lo");
System.out.println(s1==s2); // true
System.out.println(s1==s3); // false
主要是关于s3不是很理解,求大佬解释一下s3的创建过程和为什么s1和s3不等
So
s1:先在字符串常量池查找是否已有“hello”对象,没有,创建之,并把引用地址赋给s1
s2:本质上是new StringBuilder("hel").append("lo"),常量池中已存在“hello”对象,所以是对同一内存对象的引用,故sout(s1 == s2)为true
s3:new String("lo")会在常量池中创建一个新的字符串对象,即使通过new StringBuilder().append()拼接成"hello",也已经是全新的存在了,换句话说,即使s3 = new String("hello"),结果依然是false,因为new
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
3 回答2k 阅读
2 回答782 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.3k 阅读
官方文档 中的 3.10.5 有对这个的解释