为什么这个代码段没有给出Java教程文档中所述的运行时错误?

为什么这个代码段没有给出Java教程文档中所述的运行时错误?,java,Java,参考官方Java教程文档中的本文和上面的代码片段,我试图重现运行时错误。我的代码没有产生任何运行时错误,有什么问题 因为它的方法接受或返回一个对象,所以只要它不是基本类型之一,您就可以自由地传入任何您想要的内容。在编译时无法验证类的使用方式。代码的一部分可能会将整数放入框中并期望从中获取整数,而代码的另一部分可能会错误地传入字符串,从而导致运行时错误 我写的代码 public class Box { private Object object; public void set(

参考官方Java教程文档中的本文和上面的代码片段,我试图重现运行时错误。我的代码没有产生任何运行时错误,有什么问题

因为它的方法接受或返回一个对象,所以只要它不是基本类型之一,您就可以自由地传入任何您想要的内容。在编译时无法验证类的使用方式。代码的一部分可能会将整数放入框中并期望从中获取整数,而代码的另一部分可能会错误地传入字符串,从而导致运行时错误

我写的代码

public class Box {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

此代码传入一个
字符串
,但尝试检索一个
整数
。编译器无法检测到这将失败。在运行时,它抛出一个
ClassCastException

它不会产生任何运行时错误,因为每个字符串都是一个对象

当您试图将get检索到的对象分配给其他不同类型的对象时,会出现错误

例如:

public static void main(String[] args) {
    Box g = new Box();

    g.set("hello again");
    Integer i = (Integer) g.get();

    System.out.println(i + 1);
}

你误解了这个例子。这并不是说传入
字符串将导致错误。这意味着当程序的另一部分希望得到一个
整数时,传入
字符串将导致错误

例如:

 g.set("hello again");
 Integer i = (Integer) g.get(); // getting string and trying to cast it to integer.
将导致错误

 g.set("hello again");
 Integer i = (Integer) g.get(); // getting string and trying to cast it to integer.
public static void main(String [] args) {
    Box g = new Box();
    g.set("hello again");
    Integer error = (Integer) g.get();
}