2013-03-13 13 views
7

EDIT 1+演算子と++演算子の間のスペースを削除するとどうなりますか?

免責事項:私は+++が本当にスペースのないオペレータが、+++事業者ではないことを知っています。私はまた、これを使う理由がないことも知っています。この質問はちょうど好奇心から外れています。


だから、私は+++varの間のスペースはJavaで必要とされるかどうかを確認するには興味があります。これは、プリントアウトし

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

0 
1 

最初と+二の間にスペースがあったかのように私は、期待通りに動作します

は、ここに私のテストコードです。

はその後、私は文字列の連結でそれを試してみました:

s 2 

をしかし、3行目はコメント解除されている場合、コードがエラーで、コンパイルされません:

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

これは、プリントアウトし

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; 
        ^

文字列連結と整数加算の動作の違いition?


EDIT 2

Abhijit's follow-up questionで説明したように、人々が言及したルールが(大きなトークンが短いトークン++の前に、最初に解析され++)それが現れるthis presentationで議論されていますMunchy Munchyルールと呼ばれる。トリプルプラス演算子そのものではない

+1

そしてsimmilaryと同じになります。有効ではありませんが、i = i ++ + ++ i; IS。 – Jayamohan

+0

オペレーターではないので、どのように動作するかを尋ねることは意味をなさない。本当の質問ではありません。 – EJP

+1

フォローアップの質問「+++」はポストフィックスのインクリメントに続いてインフィックス(常に)ですか?](http://stackoverflow.com/q/15382171/977038) – Abhijit

答えて

5

コンパイラは+++を検出したときに、それは++ +として取り、できるだけ長いトークンを生成します。

ので

a +++ b 

のコードは常に私は=私を+++++

(a++) + b 
+1

+1最長のトークンルールを示す。 – Morwenn

+0

最長のトークンルールの場合+1。 – chm

2

、それを一緒に2つの事業者である:

何acutuallyトリプルプラスがないことである:

+++ 1 == ++ + 1;

あなたがしようとしているのは++です。これは未定義です。

コードにスペースを入れずに+++を使用したことはありません。誰もそれが何をしているかを知ることはほとんどありません。さらに、1週間ほど後、あなたは実際にあなた自身が何をしているのか分からないでしょう。

13

+++演算子はありません。あなたが持っているのは接尾辞演算子のあとに続く接尾辞++の演算子です。これはコンパイルエラーです。なぜなら、接尾辞++は変数にのみ適用でき、"s "は変数ではないからです。

+接頭辞の後にプレフィックス++という接頭辞が続くので、演算子の間にスペースを入れる必要があります。

実際、いつでも実行する必要があります。 +++は読みやすくするための犯罪です!

1

+++は単独では演算子ではありません。次いでiプリインクリメント値で

i = i +++i;結果、iの値に加算し、iに格納します。

文字列では、+は加算を意味するものではないため、文字列と整数を連結してみようとしています。ソースを解析するとき

関連する問題