2013-03-13 92 views
7

編輯1如果刪除+和++運算符之間的空格,會發生什麼情況?

免責聲明:我知道+++是不是一個真正的運營商+++運營商沒有空格。我也知道沒有理由使用它;這個問題只是出於好奇。


所以,我很感興趣,看看在Java中需要+++var之間的空間。

這裏是我的測試代碼:

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

此打印出:

0 
1 

爲我所期望的,就像如果有第一和第二+之間的空間,其工作原理。

然後,我用字符串連接試了一下:

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

這會打印出:

s 2 

但如果第三行是註釋掉的代碼不能編譯,與錯誤:

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's follow-up question討論的那樣,人們已經提到的規則在this presentation地方出現討論被稱爲Munchy Munchy規則。

+1

而simmilary I = I +++++我;是無效的,但我=我+ + +我; IS。 – Jayamohan 2013-03-13 06:57:39

+0

因爲它不是一個操作員,所以問它是如何工作的沒有意義。不是一個真正的問題。 – EJP 2013-03-13 09:08:27

+1

後續問題[是'+++'它只是一個後綴增量後跟一箇中綴(總是)?](http://stackoverflow.com/q/15382171/977038) – Abhijit 2013-03-13 10:22:30

回答

5

編譯器解析源時,因此,當它遇到+++,它把它作爲++ +生成儘可能長的令牌。

所以

a +++ b 
代碼

永遠是相同

(a++) + b 
+1

+1提到最長的令牌規則。 – Morwenn 2013-03-13 12:29:42

+0

最長令牌規則+1。 – chm 2013-03-13 19:57:51

2

三重加上不是操作者本身,它是兩個操作員組合:

什麼三重加acutually所做的是:

一個+++ 1 ==一個++ + 1;

你想要做的是++一個字符串,它是未定義的。

永遠不要在你的代碼中使用+++沒有空格;幾乎沒有人會知道它的作用(沒有諮詢網絡)。而且,在一個星期左右之後,你不會知道它實際上是什麼。

13

運營商沒有+++。你在那裏有一個後綴++運算符,後面跟着一箇中綴+運算符。這是編譯錯誤,因爲postfix ++只能應用於變量,並且"s "不是變量。

由於您確實是指中綴+運算符後跟前綴++運算符,因此需要在運算符之間放置空格。

其實,你應該無論如何。 +++是針對可讀性的罪行!

1

+++本身不是運營商。

i = i +++i;導致的i一個預增量-值,然後將它添加到的i值並將其存儲在i

對於字符串,+並不意味着加法,因此您試圖將字符串和整數連接在一起。

相關問題