7

編集1

免責事項:これは実際には演算子ではなく、スペースのないand演算子であることはわかっています。 また、これを使用する理由がないこともわかっています。この質問は単なる好奇心からです。+++ +++


+したがって、Java でとの間のスペースが必要かどうかを確認したいと思い++varます。

ここに私のテストコードがあります:

int i = 0;
System.out.println(i);
i = i +++i;
System.out.println(i);  

これは出力します:

0
1

これは、 first と second の間にスペースがあるかのように、期待どおりに機能し+ます。

次に、文字列連結で試しました:

String s1 = "s " + ++i;
System.out.println(s1);
// String s2 = "s " +++i;

これは出力します:

s 2

ただし、3 行目のコメントが解除されている場合、コードはコンパイルされず、次のエラーが発生します。

Problem3.java:13: unexpected type
required: variable
found   : value
    String s2 = "s " +++i;
                ^
Problem3.java:13: operator + cannot be applied to <any>,int
    String s2 = "s " +++i;
                     ^

文字列連結と整数加算の動作の違いの原因は何ですか?


編集2

Abhijit のフォローアップの質問で議論されているように、人々が言及したルール (より大きなトークン ++ が最初に解析され、短いトークン ++ の前に解析される) は、Munchy Munchy ルールと呼ばれるように見えるこのプレゼンテーションで議論されています。

4

4 に答える 4

13

+++オペレーターはいません。そこにあるのは++、中置演算子が続く後置+演算子です。postfix++は変数にのみ適用でき、変数で"s "はないため、これはコンパイル エラーです。

中置+演算子の後に前置++演算子が続くという意味なので、演算子の間にスペースを入れる必要があります。

実際には、とにかくそれを行う必要があります。 +++可読性に対する犯罪です!!!

于 2013-03-13T06:27:48.770 に答える
5

コンパイラは、ソースを解析するときに可能な限り長いトークンを生成するため、+++に遭遇すると、+++と見なされます

だからのコード

a +++ b

常に同じになります

(a++) + b
于 2013-03-13T10:06:14.853 に答える
2

トリプル プラスは演算子そのものではなく、2 つの演算子を組み合わせたものです。

トリプルプラスが実際に行うことは次のとおりです。

a+++1 == a++ + 1;

あなたがやろうとしているのは、未定義の ++ a String です。

コード内でスペースなしで +++ を使用しないでください。それが何をするのかを知っている人はほとんどいないでしょう (Web に相談しなければ)。さらに、1週間ほど経つと、実際に何をしているのかわからなくなります。

于 2013-03-13T06:27:45.037 に答える
1

+++それ自体は演算子ではありません。

i = i +++i;プレインクリメント値にiなり、それを の値に加算して にi格納しiます。

文字列で+は、加算を意味しないため、文字列と整数を連結しようとしています。

于 2013-03-13T06:28:08.947 に答える