F废话不多说,直接贴代码。
下面是运行结果:
得出结论:
- 单独使用引号创建的字符串都是直接量编译期就已经确定存储到常量池中。
- 使用new string()创建的对象会存储到堆内存中,是运行期才创建。
- 使用只包含直接量的字符串连接符如”aa” + “bb”创建的也是直接量编译期就能确定已经确定存储到常量池中(str2和str3) 。
- 使用包含string直接量(无final修饰符)的字符串表达式(如”aa” + 1)创建的对象是运行期才创建的, 存储在堆中;通过变量/调用方法去连接字符串,都只能在运行时期才能确定变量的值和方法的返回值,不存在编译优化操作。