這是理解Java對算術運算評估的理論問題。由於+
和-
具有相同的優先級,因此我不太瞭解Java如何評估以下表達式(兩個操作數之間有多於一個的+
和-
運算符)。多個+和 - 運算符的Java優先級
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a+-b); // results in -1
System.out.println(a-+b); // results in -1
System.out.println(a+-+b); // results in -1
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+b); // results in 3
System.out.println(a+-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
System.out.println(a+-+-+b); // results in 3
}
從Java 8語言規範(§15.8.2):當施加到數字類型的兩個操作數,產生操作數的總和
二進制+運算執行加法。
二進制運算符執行減法,產生兩個數字操作數的差異。
[...]
如果操作數表達式沒有副作用,那麼加法是一個交換操作。
當操作數都是相同類型時,整數加法是關聯的。
我還注意到,每次#operator都是偶數,結果是一樣的,順序無關緊要。 但是當#operators奇怪時,這並不一定會影響結果。例如。在以下兩個表達式中,還有一個-
比+
多,但結果是不同的。
System.out.println(a-+-b); // results in 3
System.out.println(a-+-+-b); // results in -1
有了這些信息,我仍然沒有看到模式或工作方式。
我相信* a + -b *被執行爲* a +(-b)*。檢查出來 –
@Sanket Makani' - '和'++'在這種情況下是不允許的因爲Java將其作爲增量/減量操作 – ncw