最近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.