【发布时间】:2021-01-30 00:54:54
【问题描述】:
我目前正在辅导一名 AP Java 高中生,她问我一个关于“双重铸造”的问题。我以前从未听说过这个学期,但显然她的老师希望她在即将到来的期末考试中知道它。
她老师提供的示例是,如果您想将 Integer 转换为 String,则必须执行以下操作才能避免编译器错误:
Integer i = new Integer(5);
String s = (String)(Object) i;
问题是:你想在现实生活中什么时候这样做?
老师只提供了导致运行时错误的示例。另外,我从来不知道有这个术语,但这样做似乎是个坏主意,因为当这两种类型不兼容时只会出现错误。
谢谢!
【问题讨论】:
-
该代码肯定会导致
ClassCastException,而Integer可以“向上转换”为Object,对象仍然知道它是Integer...第二次转换将失败。她的老师抽什么烟? :p -
@fge 是的.. 当她今天问我这个问题时,我想不出任何有意义的例子,所以我告诉她我会回复她.. 很高兴知道这只是一个坏主意,我没疯。 =]
-
没有理由编写这样的代码。如果您知道投射后所需的最终对象类型,那就是您要将对象投射到的对象。你确定老师的意思不是像 (String)((Object)i).doSomething()) 吗?
-
@aishwarya 你的例子会更有意义,但我提供的例子直接来自我的学生从课堂上得到的笔记。
-
实际上,在处理原始类型时,双重转换很有用。假设
Object get()返回一个整数/整数。现在考虑int i = (int) (Integer) get()。当然这个可以用int i = ((Integer)get()).intValue()来规避,稍微麻烦一点。