2017-05-04 66 views
2

它打印輸出從case 10:但打印x=11如何?之後一行它增加x增量操作員如何在開關櫃中工作?

int x = 10; 
switch (x++) { 
case 10: 
     System.out.println("case 1 ::: "+x); 
     break; 
case 11: 
    System.out.println("case 2 ::: "+x); 
    break; 
default: 
    System.out.println("default ::: "+x); 
} 

輸出

case 1 ::: 11 
+1

增量操作符它以同樣的方式在所有其他聲明。它對於'switch'語句行爲不同。 – Andreas

+0

首先使用x的值爲10,然後遞增,之後增量爲11,以便更好地理解讀後增量器和增量器 – dhS

+0

遞增運算符在Java教程http:// docs中進行了說明。 oracle.com/javase/tutorial/java/nutsandbolts/op1.html。閱讀精細手冊。 –

回答

0

Incremet第一個開關評估,然後只有x增加。 如下...

x = 10; 
switch (x++){...} 

switch進行評估第一。

案例10:將被選中。然後只有x會增加1x變成11)。

然後,在殼體塊語句得到執行(O/P將被==殼體1 ::: 11)

//希望ü可以得到更加清晰,也通過將其與預先增量條件進行比較

x = 10; 
switch (++x){...} 

x將得到遞增第一。(x變爲11)

然後切換條件得到評估

案例11:將被選中。

然後在case塊語句得到執行(O/P將==情況下2 ::: 11)

5

後增量操作x++增量x的價值,但返回的x以前的值 - 10。因此,switch語句的值爲10(即x++表達式的值),並執行case 10:的塊,此時System.out.println("case 1 ::: "+x);將輸出遞增的值x - 11

0

X ++是一個後增量。這樣,x(10)的初始值就被用於開關,然後只有它纔會增加。

這就是爲什麼你有情況1,然後11

1

你的問題「之後排隊它增加x的值?」顯示你完全忽略增量操作符的位置。

立即遞增值。增量不是推遲直到任何語句結束。

E.g.如果x = 10,陳述y = x++ + x++ + x++將計算y = 10 + 11 + 12並導致y = 33x = 13

相比之下,陳述y = ++x + ++x + ++x將計算並導致y = 36x = 13。如你所見,後增和前增操作符會立即影響被增量的變量的值。區別在於表達式是使用增量之前(之前)還是之後(之後)的值。

對於更復雜的例子,看到這樣的回答:Incrementor logic

+0

如果它立即增加x的值,那麼爲什麼它選擇案例10:? –

+0

因爲表達式使用*之前的*增量值。如果你想在* -increment值後加*,使用'++ x',而不是'x ++'。這是兩者之間的差異。 – Andreas

0

switch語句獲取與x=10相匹配的情況下,1和後增量操作1,同時增加它的價值,所以x成爲11評估。這就是爲什麼你得到結果case 1 ::: 11

+0

因此不用 - > switch(x ++)進行評估。 –

+1

@BharatSahu是它不在開關條件評估.. – dhS

+0

你有一個後增量操作符那裏遵循的原則*使用然後改變*。它使用x的初始值(即10)並立即將其更新爲11。 –