记录下 遇到的 一些 刁钻 面试题:
[b]嘿嘿[/b] i++ & ++i & 基本类型 传值
[b]嘿嘿[/b] 超类 & 子类 的构造函数调用顺序,子类调用超类构造函数时必须放在第1个语句
[b]嘿嘿[/b] String.split() & 正则表达式
[b]嘿嘿[/b] i++ & ++i & 基本类型 传值
public class Test {
public static void main(String[] args) {
int i = 0;
Test t = new Test();
t.increase(i);
i = i++;
// 此处输出 0
System.out.println(i);
}
public void increase(int x) {
x = x + 1;
}
}
[b]嘿嘿[/b] 超类 & 子类 的构造函数调用顺序,子类调用超类构造函数时必须放在第1个语句
public class Aa {
public Aa() {
System.out.println("Aa");
}
}
public class Bb extends Aa {
public Bb() {
System.out.println("Bb");
// 此处调用是错误的,因为 子类构造函数调用超类构造函数时,必须在第1个语句调用,
super();
}
public static void main(String[] args) {
Bb b = new Bb();
}
}
[b]嘿嘿[/b] String.split() & 正则表达式
public static void main(String[] args) {
// String.split(regex) 其实是调用了 Pattern.compile(regex).split(),其中对 特殊字符 和 头、尾部空字符的处理
String[] ss = "|A|B|C".split("|");
// 答案是6,数组为 :[, |, A, |, B, |, C],其中 | 被看做或,即,以空字符分隔,且尾部的空字符忽略,头部的保留,因此有6个
System.out.println(ss.length);
}