62,620
社区成员
发帖
与我相关
我的任务
分享


String a="h"
String b=a+"g" //编译器会优化成: String b = new StringBuilder(a).append("g").toString();,对象在堆中。
String c="h"+"g" //编译器会优化成:String c = "hg";,对象在常量池中
System.out.println(b==c) //结果为false
//如果对上面的例子还不能理解,看看下面的
final String a="h"
String b=a+"g" //编译器会优化成: String b = "hg";,对象在常量池中
String c="h"+"g" //编译器会优化成:String c = "hg";, 对象在常量池中
System.out.println(b==c) //结果为true
从上面的例子,我们可以看到编译器对字符串“+”操作的优化处理,如下:
1.如果都是常量直接合并放在常量池中;
2.如果其中一个变量不是常量,则使用StringBuilder来进行拼接处理,由于对象是在运行时创建的,对象会在堆中分配内存;
String b = a + "g"; //b由对象和“g”,此时b在堆中
String c="h"+"g";//c是由常量池中的“h”和“g”组成