Loading... # 引言 无聊,翻源代码,看到不能理解的东西了。 # 源代码 以下代码引自String中toLowerCase方法的一部分 ```java /* Now check if there are any characters that need to be changed. */ scan: { for (firstUpper = 0 ; firstUpper < len; ) { char c = value[firstUpper]; if ((c >= Character.MIN_HIGH_SURROGATE) && (c <= Character.MAX_HIGH_SURROGATE)) { int supplChar = codePointAt(firstUpper); if (supplChar != Character.toLowerCase(supplChar)) { break scan; } firstUpper += Character.charCount(supplChar); } else { if (c != Character.toLowerCase(c)) { break scan; } firstUpper++; } } return this; } ``` # 理解 这个东西第一感觉就是C中的标签,通过todo进行跳转到某一个代码位置,但是Java不支持todo,所以就很迷,然后break中平时使用是 break不加任何后缀的,但是这里面break添加了“标签”,所以没那么简单。 # 实践&验证 ```java System.out.println("#START"); a: { for (int i = 0; i < 5; i++) { System.out.println("S-FLAG-" + i); for (int j = 0; j < 6; j++) { System.out.println(j); if (j == 5) { break a; } } System.out.println("E-FLAG" + i); } System.out.println("----"); } System.out.println("#END"); ``` 此时输出的结果为: ```bash #START S-FLAG-0 0 1 2 3 4 5 #END ``` 如果把break a;换成break; ,那么输出的是如下: ```bash #START S-FLAG-0 0 1 2 3 4 5 E-FLAG0 S-FLAG-1 0 1 2 3 4 5 E-FLAG1 S-FLAG-2 0 1 2 3 4 5 E-FLAG2 S-FLAG-3 0 1 2 3 4 5 E-FLAG3 S-FLAG-4 0 1 2 3 4 5 E-FLAG4 ---- #END ``` # 结论 综上可以发现,这种用法可以跳出多层循环,类似于return方法跳出循环,但是这也可以理解成把自己定义成了一个方法,然后return了,方法中的方法,这也解释的通`System.out.println("----");`方法没有执行了。 # 求助 如果哪位大佬知道这个方法叫什么名字,以及相关的说明,欢迎评论。 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏