【问题标题】:Java Compiler String optimizationJava 编译器字符串优化
【发布时间】:2012-12-13 17:16:39
【问题描述】:

在我看来,编译器会采用这样的方式是合理的:

log.info("A really long logger message that is kind of a pain in the tucous " + 
    "and violates formatting standards by making the line to long");

并将两个字符串编译为一个。我很确定这是真的,但我想 如果有人提出来,让我的鸭子排成一排。

【问题讨论】:

    标签: java string compiler-construction


    【解决方案1】:

    是的,这将由 Java 语言规范的 constant expression 部分处理。具体见15.18.1. String Concatenation Operator +部分

    【讨论】:

      【解决方案2】:

      由常量表达式(第 15.28 节)计算的字符串在 编译时,然后将它们视为文字。

      JLS 中的那句话展示给任何“挑战”你的人。

      【讨论】:

        【解决方案3】:

        为了检查 JLS 关于常量表达式的说法是否属实,我编写了这段代码,Test.java

        public static void main(String[] args) {
            log.warning("123" + "456");
        }
        

        然后用 Jad 反编译 Test.class 得到这个

        public static void main(String args[])
        {
            log.warning("123456");
        }
        

        也就是说,在Test.class中只有一个字面量“123456”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-16
          • 2013-06-07
          • 1970-01-01
          • 1970-01-01
          • 2011-08-24
          • 1970-01-01
          • 2012-05-23
          相关资源
          最近更新 更多