Java Quiz

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

  1. Effective Java Reloaded: This Time It's for Real
    by Joshua Bloch, Google, Inc.
  2. Java Puzzlers Episode VI: The Phantom-Reference Menace/Attack of the Clone/Revenge of the Shift
    by Joshua Bloch, Google, Inc. and William Pugh, Univ. of Maryland

- Written on Sat Dec 29 04:52:07 2007.