我正在查看8u40-b25 JDK类String的源代码,它包含一个scan: {}块:
2557 /* Now check if there are any characters that need to be changed. */
2558 scan: {
2559 for (firstUpper = 0 ; firstUpper < len; ) {
2560 char c = value[firstUpper];
2561 if ((c >= Character.MIN_HIGH_SURROGATE)
2562 && (c <= Character.MAX_HIGH_SURROGATE)) {
2563 int supplChar = codePointAt(firstUpper);
2564 if (supplChar != Character.toLowerCase(supplChar)) {
2565 break scan;
2566 }
2567 firstUpper += Character.charCount(supplChar);
2568 } else {
2569 if (c != Character.toLowerCase(c)) {
2570 break scan;
2571 }
2572 firstUpper++;
2573 }
2574 }
2575 return this;
2576 }
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
scan只是一个标签.它允许稍后:
break scan;
Run Code Online (Sandbox Code Playgroud)
...允许break语句突破外循环而不是内循环.
有关标记语句的更多详细信息,请参阅JLS的第14.7节.