Java类型转换实现

7

我知道如何在Java中使用强制转换,但我有一个更具体的问题:您能否解释一下强制转换是如何工作的(在内存中)?

  • 在向上转型和向下转型时,变量类型如何改变?

  • JVM如何知道将此方法发送到此对象是安全的?

提前感谢您。


你可以看一下像OpenJDK这样的JVM实现。 - Rom1
4个回答

4

请问一下内存中的类型转换是如何工作的?

它在字节码级别上运行,而不是真正的内存中进行。

变量类型在向上转型和向下转型时如何改变?

如果它是一个原始类型,并且有一个特殊的字节码指令,例如从长整型到整型,如:

long l = ...
int i = ( int ) l;

字节码为:checkcast指令引用时使用l2i

JVM 如何知道从这个时间点起将该方法发送给此对象是安全的?

它不知道,它在运行时尝试操作,如果失败将抛出异常。

以下写法是合法的:

String s = ( String ) new Date();

3

1

所有原始数据类型的转换都在寄存器中完成(就像大多数操作一样)。对于原始数据类型,在许多情况下,向下转换时会取低位,而向上转换时会扩展符号。虽然存在一些特殊情况,但通常您不需要知道这些。


在编程中,引用的向上转型/向下转型的工作方式相同,因为它检查实际对象是否是您要转换的类型的实例。您可以进行既不是向上转型也不是向下转型的转换。

例如:

 Number n = 1;
 Comparable c = (Comparable) n; // Number and Comparable are unrelated.
 Serializable s = (Serializable) c; // Serializable and Comparable are unrelated.

是的,我知道这个。我更感兴趣的是非基本类型的转换。不是因为有问题需要解决——只是想更好地了解这种语言。 - StKiller

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接