日志方法参数中使用+拼接的字符串字面量是否存入编译器常量池?
方法参数中的字符串字面量拼接是否会在编译时合并?
代码对比
第一种写法:
log.info("very long string {}, " + " another string {}", a, b)
第二种写法:
log.info("very long string {}, another string {}", a, b)
已知的编译期字符串合并规则
根据Java规范,字符串字面量会被存储在编译器常量池中,并在编译时创建。例如:
String x = "very long string " + "another string";
这段代码在编译时完全等价于:
String y = "very long string another string";
由于x和y都是编译时就完成求值的字面量,它们会指向常量池中的同一个引用。
核心疑问
那如果字符串拼接操作是作为方法的参数来执行的(比如开头的日志调用场景),上述编译期合并的结论是否依然成立?
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

