Java 强制转换实现



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

  • 上投和下投时变量类型如何变化?

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

提前谢谢你。

你能解释一下铸件是如何工作的(在记忆中)吗?

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

在上投和下投时如何更改变量类型?

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

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

字节码为:l2i if 是指令的引用checkcast

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

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

写是合法的:

String s = ( String ) new Date();

这个问题的公认答案的可能副本:Java 强制转换运算符如何工作?

这里还有一个相当广泛的解释,涵盖了所有数据类型等:http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5

基元的所有转换都是在寄存器中完成的(与大多数操作一样) 对于基元,在许多情况下,当向下转换时,将采用较低的位,对于向上转换,符号被扩展。 有边缘情况,但您通常不需要知道这些是什么。


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

例如

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

如果您对 jvn 关于强制转换如何工作的内部工作原理感兴趣,您还可以查看 jvm 规范 http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#25611

最新更新