三道清华Java测试题
|
|
第一题 输出的是 String
因为在调用方法时 null可以匹配不同的重载版本 但是String s 的方法更为具体 所以选择他
如果是同样的具体的类 譬如说X 这样test.(null)方法时 因为X 和 String 都具体 所以会报
Ambiguous method 错误
第二题 输出true
这里考察的是编译时常量 和常量的折叠 以及String interning的知识
“abc” “a” “bc” 在Java里都是String类型的编译时常量 + 左右两侧都是常量时 这个+表达式也会被认为是编译时常量表达式
第三题 输出 nullnull
考察了静态变量的默认初始化 以及String的连接 +
静态变量会在类加载过程的linking阶段得到默认初始化 引用类型的静态变量会被默认初始化为null
然后是String 对象的连接 s0 = s1 + s0; 是一个语法糖
会被解糖为 s0 = new StringBuilder.append(s0).append(s1).toString();
StringBulider 根据规范 会把null的字符串 当做”null” 所以最后输出nullnull
TAT 我真是菜哭了….
还要好好学Java