java - 为什么这段代码可以编译但运行时崩溃?

标签 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);
        }
    }
}

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

最佳答案

首先,您正在将 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);
}

关于java - 为什么这段代码可以编译但运行时崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070062/

相关文章:

java - Java HashSet 中元素的排序

java - 如何在 Activity 开始时将按钮置于按下状态?

c# - C#如何将一个程序编译成不同的项目

java - 如何将.jar文件添加到javac编译中(Windows 10)

iPhone 在导航 Controller 动画期间崩溃,我有什么选择?

android - 奇怪 - Android IntentService 杀死了我应用程序的其余部分,但继续自行运行

java - 文件/本体(turtle、N3、JSON、RDF-XML)等到 java 中的 .ttl 文件转换

java - 分割java字符串并在字母数字的末尾和开头添加字符

c++ - 如何一起使用编译和使用多个类似的 c++ 库?

logging -/var文件系统上的日志文件会导致应用程序崩溃吗