为什么这段代码可以编译却在运行时崩溃?

时间:2019-09-23 20:54:12

标签: java compilation crash

考虑以下代码:

public class foo{
    static class Node{
        Object item;
        Node next;
        Node(Object item, Node next) {
            this.item = item;
            this.next = next;
        }
    }

    public static void main(String[] args) {
        Node data = null;
        data = new Node("hello", data);
        data = new Node(5, data);
        while (data!=null){
            String s = (String) data.item;
            System.out.println(s);
        }
    }
}

这是一个选择题,答案是“此代码将成功编译,但运行时会崩溃”。 为什么?
它在哪里崩溃?

1 个答案:

答案 0 :(得分:3)

首先,您正在将data.item投射到String。这将产生:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

第二,就像@GBlodgett指出的那样,变量数据永远不会在循环内更新。

while (data != null){
    String s = (String) data.item;
    System.out.println(s);
}