4

ここでこの質問を見ました。この質問の問題は、次の行です。

Integer i3 = (Integer) -128; /*** Doesn't compile ***/

答えのいくつかが言うように:

The compiler interprets the - as the two-arg minus operator, i.e. it's trying to subtract 128 from some other number named Integer, but there's no such variable in scope

答えは私にとって正しいようです。今groovyで、以前と同じコードを試しました:

Integer i3 = (Integer) -128; /*** compiles!!! ***/

この行のコードでもコンパイルされます:

Integer i3 = (Integer) -(128); /*** compiles ***/

Groovy はこの操作をどのように実行しますか? すべてのJvm言語はこれを行いますか? Groovy の場合、舞台裏で何が起こっているのか。

これはJavaのルールに違反していませんか? 少し混乱しました。

参考までに、動作中の Groovy コードをここにタグ付けしました。

前もって感謝します。

4

3 に答える 3

4

GroovyはJavaではありません。

Javaの仕様に従う必要はなく、この場合は...そうではありません。

明確にするために編集:あなたを混乱させているのは、これらが2つの異なる言語であることを理解していないことだと思います。GroovyコンパイラとJavaコンパイラはどちらも、ソースコードからバイトコードを出力し、JVM(Java仮想マシン)で実行されます。JLS(Java言語仕様)は、Java言語にのみ適用されます。Groovyはそれに固執する必要はありません。

于 2011-10-30T02:52:47.320 に答える
1

コード内のマイナス記号をどのように解釈するかは、言語定義を実装するコンパイラの機能です。コードが実際に実行されるランタイム システム (この場合は JVM) とはまったく関係ありません。したがって、異なる言語は同じ記号/キーワードなどを持つことができ、異なる方法で動作します。

于 2011-10-30T02:58:09.197 に答える
0
Integer i3 = (Integer) -128;
println i3

groovy1.8でコンパイルおよび実行されます

于 2011-10-30T02:52:29.027 に答える