Java 铸造实现

StK*_*ler 5 java jvm casting

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

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

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

先感谢您。

Osc*_*Ryz 4

你能解释一下选角是如何进行的(在记忆中)吗?

它在字节码级别工作,而不是真正在内存中工作

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

如果它是具有特殊字节码指令的原语,例如从长整型到整数,如下所示:

long l = ...
int i = ( int ) l;
Run Code Online (Sandbox Code Playgroud)

字节码是:l2iif 是指令的引用checkcast

JVM 如何知道从此时开始可以安全地将此方法发送到此对象?

它不会,它会尝试在运行时执行此操作,如果失败则会引发异常。

这样写是合法的:

String s = ( String ) new Date();
Run Code Online (Sandbox Code Playgroud)