IT Notes‎ > ‎Java‎ > ‎Java Language‎ > ‎《Java 解惑》笔记‎ > ‎

Puzzle 19: Classy Fire

以下代码片段输出什么?

public class Classifier {

        public static void main(String[] args) {
                System.out.println(classfiy('n') + classfiy('+') + classfiy('2'));
        }

        static String classfiy(char ch) {
                if ("0123456789".indexOf(ch) >= 0)
                        return "NUMERAL ";

                if ("abcdefghijklmnopqrstuvwxyz".indexOf(ch) >= 0)
                        return "LETTER ";

                /*
                if ("+-*/".indexOf(ch) >= 0)
                        return "OPERATOR";
                */
                return "UNKNOWN";
        }
}

如果你仔细看, 并得出结果为:"LETTER UNKNOWN NUMERAL ", 那就中套了, 这里要说明的问题并非要讨论 String.indexOf(int) 方法, 而是注释, 真是出人意料. 注意第三个 if 块的注释部分, 高亮背景为黄色的, 先就匹配了, 高亮为绿色的 */因为没有匹配的/*, 程序就报错了.

教训: 用双斜杠的注释比较保险.

另外: /* */ 格式的注释是不能嵌套的.

参考
  1. Java API document: String.indexOf(int ch)
  2. JLS 3.7 Comments
  3. JLS 14.20, 条件编译技术,待翻译。TODO
  4. 代码: http://bit.ly/f4yAg
Comments