最近Java用的比较多。关于Java的一些问题。
(一) 下面这个程序有什么问题?
public static void rotate(List<?> list) {
if (list.size() == 0)
return;
list.add(list.remove(0));
}
(二) 下面这个程序打印的结果是什么?
public class ShortSet {
public static void main(String args[]) {
Set<Short> s = new HashSet<Short>();
for (short i = 0; i < 100; i++) {
s.add(i);
s.remove(i - 1);
}
System.out.println(s.size());
}
}
(A) 1
(B) 100
(C) 抛出异常
(D) 以上都不是
(三)下面这个程序打印Ground Round的频率?
public class Round {
public static void main(String[] args) {
Random rnd = new Random();
int i = rnd.nextInt();
if (Math.round(i) != i)
System.out.println("Ground Round");
}
}
(A) 从不
(B) 有时
(C) 差不多每一次
(D) 每一次
(四) 下面这个程序打印的结果是什么?
public class Hamlet {
public static void main(String[] args) {
Random rnd = new Random();
boolean toBe = rnd.nextBoolean();
Number result = (toBe || !toBe) ?
new Integer(3) : new Float(1);
System.out.println(result);
}
}
(A) 3
(B) 1.0
(C) 抛出异常
(D) 以上都不是
(五) 下面这个程序打印的结果是什么?
public class Elvis {
// Singleton pattern: there's only one Elvis
public static final Elvis ELVIS = new Elvis();
private Elvis() { }
private static final Boolean LIVING = true;
private final Boolean alive = LIVING;
public final Boolean lives() { return alive; }
public static void main(String[] args) {
System.out.println(ELVIS.lives() ?
"Hound Dog" : "Heartbreak Hotel");
}
}
(A) Hound Dog
(B) Heartbreak Hotel
(C) 不确定
(D) 以上都不是
正确答案:
第一个因为add和remove是两个操作,它们都只知道自己操作对象的类型是「?」而推断不出它们是在对同样类型的对象进行操作。于是系统在编译时会给出错误。
2-5: B C D D。
二:因为Set的类型是Short,但是我们移除的是Integer。
三:96.7%的时间。全是float的错,用double会安全很多。
四:输出的结果是3.0。起因是「? : 」操作符的奇怪定义。
五:你会得到NullPointerException。类初始化的问题。
更详细的解释可以参考reference。
Reference:
- Written on Sat Dec 29 04:52:07 2007.