Почему этот код компилируется, но вылетает при запуске? - PullRequest
0 голосов
/ 23 сентября 2019

Рассмотрим следующий код:

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 Ответ

3 голосов
/ 23 сентября 2019

Первый , Вы кастуете 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);
}
...