[英]Fall-through if default is in middle of switch case?
我有個問題。 在switch語句中,即使不是最后一個,是否也default
測試了最后一個?
如果是這樣,請在以下代碼段中:
int i = 6;
int a=0, b=0, c=0;
switch (i)
{
case 1:
a++;
case 2:
default:
case 3:
b++;
case 6:
c++;
}
System.out.println(a + " " + b + " " + c);
與情況6匹配后,增加c的值,因為沒有中斷,它將恢復默認值嗎?
我確實嘗試了這段代碼,但它似乎並沒有默認設置,也沒有發生故障。 我只是想知道?
目前,您的所有案件都會失敗,因為案件不會break;
同樣,您的開關有條件地基於i
,因此,如果要查看每種情況,則需要更改i
。
利用break;
應該不會影響您的案例在您的切換狀態下的位置,這也是default
情況下的“案例”
編輯:正如@Ivan所提到的,如果打算通過,那么案件的位置將很重要
從匹配的case
評估switch
到switch
語句的break
或end。 如果您通過6,它將輸入6的大小寫,並且僅增加1。 但是,如果輸入7,它將從default
開始,並以兩個增量下降到開關的末端。
除了在switch語句開始時進行的初始測試外,沒有對案例標簽進行其他測試。 一旦使用switch語句對i
進行了評估,控制權便轉移到case 6:
標簽,因為它與i
匹配。 然后按順序執行語句,直到switch語句結束或遇到break
語句為止。 這意味着僅c
遞增。
break
語句只會終止整個switch語句的執行; 是否存在break
語句對重新測試switch表達式沒有影響,因為重新測試switch表達式都不會發生。
如果要default
輸入案例標簽,那么i
在switch語句開頭不得與任何案例標簽匹配。 如果在switch語句的開頭i
為99
,則b
和c
都會增加(發生穿透)。
有在哪里的情況下的順序標簽沒有限制的default
顯示的標簽,只有至多一個default
出現在switch語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.