我知道如何在Java中使用cast,但有一个更具体的问题;你能不能向我解释一下铸件是如何工作的(在记忆中)?
如何在向上转换和向下转换时更改变量类型?
JVM如何知道将此方法发送到此对象是安全的?
提前谢谢。
答案 0 :(得分:3)
此问题的已接受答案的可能重复: How does the Java cast operator work?
这里也有相当广泛的解释,包括所有数据类型等: http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.5
答案 1 :(得分:3)
你能解释我的演员如何运作(在记忆中)吗?
它在字节代码级别工作,而不是真正在内存中
如何在向上转换和向下转换时更改变量类型?
如果它是带有特殊字节码指令的原语,例如从长到整数,如:
long l = ...
int i = ( int ) l;
字节码为:l2i
if是带有checkcast
JVM如何知道从这时起将此方法发送到此对象是否安全?
它没有,它尝试在运行时执行它,如果失败则抛出异常。
写作是合法的:
String s = ( String ) new Date();
答案 2 :(得分:1)
所有基元的转换都是在寄存器中完成的(像大多数操作一样)对于基元,在许多情况下,当向下转换低位时,为了向上转换,符号被扩展。有边缘情况但你通常不需要知道它们是什么。
upcasting / downcasting引用的工作方式相同,因为它检查实际对象是您所投射类型的实例。你可以投射既不是向上投射也不是向下投射。
e.g。
Number n = 1;
Comparable c = (Comparable) n; // Number and Comparable are unrelated.
Serializable s = (Serializable) c; // Serializable and Comparable are unrelated.
答案 3 :(得分:0)
如果你对jvn关于演员阵容工作的内部运作感兴趣,你也可以查看jvm spec http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#25611