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

2 つの文字列を 1 つにコンパイルします。これが本当だと確信していますが、誰かがそれを持ち出すなら、私はアヒルを一列に並べたいと思います.

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" が 1 つだけあります。

于 2012-12-13T17:38:52.890 に答える