6

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

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");

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

4

3 回答 3

10

是的,这将由 Java 语言规范的常量表达式部分处理。特别参见第15.18.1 部分。字符串连接运算符 +

于 2012-12-13T17:18:37.287 回答
7

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

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

于 2012-12-13T17:19:42.250 回答
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”

于 2012-12-13T17:38:52.890 回答